Domanda

Ricevo molti errori del linker in Visual Studios per metodi che non sto nemmeno chiamando direttamente. Sono uno sviluppatore Java di giorno, ma ho un progetto che devo fare in C ++, destinato a essere eseguito su macchine Windows. Quindi, sono bloccato a scherzare con Visual Studio.

Bascally, ho un progetto os a cui ho aggiunto un metodo di accesso. Ho compilato quel progetto come file .lib (compila e collega bene).

Ho quindi il mio progetto che usa quella lib. Ho incluso la libreria in Project- > Properties - > Linker - > Inserisci e imposta la directory appropriata in Generale - > Directory lib aggiuntive. Ho incluso l'intestazione nel file appropriato e sto semplicemente chiamando il costruttore di una delle classi ... nemmeno chiamando il metodo che ho ancora creato.

Il codice viene compilato, ma ottengo la seguente montagna di errori del linker - principalmente errori LNK2019 e LNK2001. Ho provato a ricompilare con impostazioni diverse (lib, exe, ecc.) E gli errori del linker sembrano solo moltiplicarsi. Quando torno alle impostazioni precedenti, il numero di errori rimane al massimo. Qualche idea su come risolvere questo problema?

Registro build

  

Creazione avviata: Progetto: SpamCapture, Configurazione: Debug | Win32

Linee di comando:

  

Creazione di file temporaneo " c: \ SpamCapture \ SpamCapture \ SpamCapture \ Debug \ RSP0000103081740.rsp " con i contenuti   [   / VERBOSE: LIB /OUT:"C:\SpamCapture\SpamCapture\SpamCapture\Debug\SpamCapture.exe" / INCREMENTAL / LIBPATH: " C: \ SpamCapture \ Config \ Debug \ " / MANIFEST /MANIFESTFILE:"Debug\SpamCapture.exe.intermediate.manifest" /NODEFAULTLIB:"libcmtd.lib" /NODEFAULTLIB:"nafxcwd.lib" / DEBUG /PDB:"c:\SpamCapture\SpamCapture\SpamCapture\Debug\SpamCapture.pdb" / SOTTOSISTEMA: CONSOLLE / MACCHINA: X86 KeyCapture_Config.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

     

". \ Debug \ Interaction.obj "

     

". \ Debug \ InteractionSet.obj "

     

". \ Debug \ LogReader.obj "

     

". \ Debug \ SpamCapture.obj "

     

". \ Debug \ stdafx.obj "

     

". \ Debug \ SpamCapture.res "

     

". \ Debug \ SpamCapture.exe.embed.manifest.res "   ]   Creazione riga di comando " link.exe @c: \ SpamCapture \ SpamCapture \ SpamCapture \ Debug \ RSP0000103081740.rsp / NOLOGO / ERRORREPORT: PROMPT "

Finestra di output:

  

Collegamento ...   LINK: avviso LNK4067: punto di ingresso ambiguo; selezionato 'mainCRTStartup'   Ricerca nelle librerie       Ricerca in C: \ SpamCapture \ Config \ Debug \ KeyCapture_Config.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ lib \ kernel32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ user32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ gdi32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ winspool.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ comdlg32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ advapi32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ shell32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ ole32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ oleaut32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ lib \ uuid.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ odbc32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ odbccp32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ lib \ msvcprtd.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ lib \ MSVCRTD.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ lib \ OLDNAMES.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ atlmfc \ lib \ mfc80ud.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ atlmfc \ lib \ mfcs80ud.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ msimg32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ comctl32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ shlwapi.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ atlmfc \ lib \ atlsd.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ wininet.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ ws2_32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ mswsock.lib:       Ricerca in C: \ SpamCapture \ Config \ Debug \ KeyCapture_Config.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ lib \ kernel32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ user32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ gdi32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ winspool.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ comdlg32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ advapi32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ shell32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ ole32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ oleaut32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ lib \ uuid.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ odbc32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ odbccp32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ lib \ msvcprtd.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ lib \ MSVCRTD.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ lib \ OLDNAMES.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ atlmfc \ lib \ mfc80ud.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ atlmfc \ lib \ mfcs80ud.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ msimg32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ comctl32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ shlwapi.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ atlmfc \ lib \ atlsd.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ wininet.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ ws2_32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ mswsock.lib:       Ricerca in C: \ SpamCapture \ Config \ Debug \ KeyCapture_Config.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ lib \ kernel32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ user32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ gdi32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ winspool.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ comdlg32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ advapi32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ shell32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ ole32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ oleaut32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ lib \ uuid.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ odbc32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ odbccp32.lib:       Ricerca in C: \ Programmi \ Microsoft Visual Studio 8 \ VC \ lib \ msvcprtd.lib:   Ricerca delle librerie terminate

Gli errori del linker iniziano qui:

  

KeyCapture_Config.lib (KeyCapture_ConfigDlg.obj): errore LNK2001: esterno non risolto   simbolo " pubblico: virtual int __thiscall CWnd :: Create (char const *, char const *, unsigned   lungo, struct tagRECT const & amp;, classe CWnd *, unsigned int, struct CCreateContext *) "   (? Create @ CWnd @@ @@ UAEHPBD0KABUtagRECT PAV1 @ IPAUCCreateContext @@@ Z)

... un mucchio di più come questo

  

KeyCapture_Config.lib (KeyCapture_ConfigDlg.obj): errore LNK2019: esterno non risolto   simbolo " pubblico: struct HICON__ * thiscall CWinApp :: LoadIconA (unsigned int) const "   (? LoadIconA @ CWinApp @@ QBEPAUHICON @@ I @ Z) a cui si fa riferimento nella funzione " public: __thiscall   CKeyCapture_ConfigDlg :: CKeyCapture_ConfigDlg (class CWnd *) "   (?? 0CKeyCapture_ConfigDlg @@ QAE @ PAVCWnd @@@ Z)

... un mucchio di più come questo

  

(? DoDataExchange @ SetupDialog @@ MAEXPAVCDataExchange @@@ Z)   C: \ SpamCapture \ SpamCapture \ SpamCapture \ Debug \ SpamCapture.exe: errore fatale LNK1120: 34 esterni non risolti

Risultati:

  

Il registro di compilazione è stato salvato in " file: // c: \ SpamCapture \ SpamCapture \ SpamCapture \ Debug \ BuildLog.htm "   SpamCapture - 44 errore / i, 1 avviso / i

È stato utile?

Soluzione

La libreria KeyCapture_Config.lib utilizza le classi GUI MFC ( CWnd , CWinApp , ecc.), ma l'applicazione che stai collegando in è un'applicazione console (vedere l'opzione / SUBSYSTEM: CONSOLE nella riga di comando del linker). Questo non funzionerà. È necessario creare un nuovo progetto dell'applicazione GUI MFC e aggiungere la libreria a quel progetto.

Modifica: ho appena controllato il link nel tuo commento: http: // dynamicnetservices.com/~will/academic/textinput/keycapture/ e sembra che KeyCapture_Config sia in realtà un'applicazione di dialogo MFC che utilizza la DLL KeyCapture. Potrebbe essere possibile utilizzare KeyCapture in un'applicazione console collegando direttamente KeyCapture.lib .

Altri suggerimenti

L'errore di collegamento sembra lamentarsi della mancanza di molte funzioni MFC e le linee di collegamento includono: /NODEFAULTLIB:"nafxcwd.lib" che escluderebbe MFC. La lib contro cui stai collegando è costruita con MFC?

Altre cose da verificare sono che stai compilando l'app e la lib con lo stesso set di caratteri (cioè sia multibyte sia entrambi unicode).

Quando si crea una libreria non esiste un passaggio di collegamento, quindi una raccolta arbitraria di oggetti può essere lanciata in una libreria senza alcun riguardo per cos'altro potrebbe essere necessario.

Sembra che il tuo progetto sia in collegamento con il runtime di debug multithread. Questa è la tua intenzione? In tal caso, potrebbero esserci incoerenze con la libreria KeyCapture_Config che sembra stia utilizzando.

KeyCapture_Config è una libreria di terze parti? Se è così l'hai costruito dal sorgente o è stata fornita la lib / dll?

Potrebbe volerci solo qualche indagine su quali runtime C / C ++ vengono costruiti. Puoi fare riferimento all ' articolo di Microsoft KB che potrebbe aiutare a far luce sulle possibili discrepanze nella build del runtime.

Penso che Rob Walker abbia risolto il problema. Se la documentazione per KeyCapture_Config.lib non dice alcun collegamento a MFC, controllare l'origine per le direttive che richiedono il collegamento a MFC. Qualcosa del genere:

#pragma comment(lib, "nafxcwd.lib")

causerebbe una dipendenza da MFC e il documento KeyCapture_Config.lib potrebbe non essere aggiornato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top