Question

Je reçois beaucoup d'erreurs de l'éditeur de liens dans Visual studios pour des méthodes que je n'appelle même pas directement. Je suis un développeur java de jour, mais j’ai un projet à faire en C ++, destiné à fonctionner sur des machines Windows. Par conséquent, je suis coincé avec Visual Studio.

En gros, j'ai un projet OS auquel j'ai ajouté une méthode d'accesseur. J'ai compilé ce projet sous forme de fichier .lib (compile et lie bien).

J'ai ensuite mon propre projet qui utilise cette lib. J'ai inclus la bibliothèque sous Projet - > Propriétés - > Lieur - > Entrez et définissez le répertoire approprié dans le menu Général - > Répertoires Lib supplémentaires. J'ai inclus l'en-tête dans le fichier approprié et j'appelle simplement le constructeur de l'une des classes ... sans même appeler la méthode que j'ai créée pour le moment.

Le code est compilé, mais j'obtiens la montagne d'erreurs de l'éditeur de liens suivante, principalement les erreurs LNK2019 et LNK2001. J'ai essayé de recompiler sous différents paramètres (lib, exe, etc.), et les erreurs de l'éditeur de liens ne semblent que se multiplier. Lorsque je reviens aux paramètres précédents, le nombre d'erreurs reste à son maximum. Des idées pour résoudre ce problème?

Journal de construction

  

Construction démarrée: Projet: SpamCapture, Configuration: Debug | Win32

Lignes de commande:

  

Création d'un fichier temporaire " c: \ SpamCapture \ SpamCapture \ SpamCapture \ Debug \ RSP0000103081740.rsp " avec contenu   [   / 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" / SOUS-SYSTEME: CONSOLE / MACHINE: X86 KeyCapture_Config.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib oleaut32.lib uool.lib uuid.lib uuid.lib uuid.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 "   ]   Création de la ligne de commande "link.exe @ c: \ SpamCapture \ SpamCapture \ SpamCapture \ Debug \ RSP0000103081740.rsp / NOLOGO / ERRORREPORT: PROMPT"

Fenêtre de sortie:

  

Lier ...   LINK: warning LNK4067: point d'entrée ambigu; sélectionné 'mainCRTStartup'   Recherche de bibliothèques       Recherche dans C: \ SpamCapture \ Config \ Debug \ KeyCapture_Config.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ lib \ kernel32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ user32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ gdi32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ winspool.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ comdlg32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ advapi32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ shell32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ ole32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ oleaut32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ lib \ uuid.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ odbc32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ odbccp32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ lib \ msvcprtd.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ lib \ MSVCRTD.lib:       Recherche dans C: \ Program Files \ Visual Studio 8 \ VC \ lib \ OLDNAMES.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ atlmfc \ lib \ mfc80ud.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ atlmfc \ lib \ mfcs80ud.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ msimg32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ comctl32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ shlwapi.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ atlmfc \ lib \ atlsd.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ wininet.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ ws2_32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ mswsock.lib:       Recherche dans C: \ SpamCapture \ Config \ Debug \ KeyCapture_Config.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ lib \ kernel32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ user32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ gdi32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ winspool.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ comdlg32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ advapi32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ shell32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ ole32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ oleaut32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ lib \ uuid.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ odbc32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ odbccp32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ lib \ msvcprtd.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ lib \ MSVCRTD.lib:       Recherche dans C: \ Program Files \ Visual Studio 8 \ VC \ lib \ OLDNAMES.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ atlmfc \ lib \ mfc80ud.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ atlmfc \ lib \ mfcs80ud.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ msimg32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ comctl32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ shlwapi.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ atlmfc \ lib \ atlsd.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ wininet.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ ws2_32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ mswsock.lib:       Recherche dans C: \ SpamCapture \ Config \ Debug \ KeyCapture_Config.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ lib \ kernel32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ user32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ gdi32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ winspool.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ comdlg32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ advapi32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ shell32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ ole32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ oleaut32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ lib \ uuid.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ odbc32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ PlatformSDK \ lib \ odbccp32.lib:       Recherche dans C: \ Programmes \ Microsoft Visual Studio 8 \ VC \ lib \ msvcprtd.lib:   Bibliothèques de recherche terminées

Les erreurs de l'éditeur de liens commencent ici:

  

KeyCapture_Config.lib (KeyCapture_ConfigDlg.obj): erreur LNK2001: externe non résolu   symbole " public: virtual int __thiscall CWnd :: Create (char const *, char const *, unsigned   long, struct tagRECT const & amp;, classe CWnd *, unsigned int, struct CCreateContext *) "   (? Create @ CWnd @@ UAEHPBD0KABUtagRECT @@ PAV1 @ IPAUCCreateContext @@@ Z)

... un tas plus comme ça

  

KeyCapture_Config.lib (KeyCapture_ConfigDlg.obj): erreur LNK2019: externe non résolu   symbole "public: struct HICON__ * * thiscall CWinApp :: LoadIconA (unsigned int) const"   (? LoadIconA @ CWinApp @@ QBEPAUHICON @@ I @ Z) référencé dans la fonction "public: __thiscall   CKeyCapture_ConfigDlg :: CKeyCapture_ConfigDlg (classe CWnd *) "   (?? 0CKeyCapture_ConfigDlg @@ QAE @ PAVCWnd @@@ Z)

... un tas plus comme ça

  

(? DoDataExchange @ SetupDialog @@ MAEXPAVCDataExchange @@@ Z)   C: \ SpamCapture \ SpamCapture \ SpamCapture \ Debug \ SpamCapture.exe: erreur irrécupérable LNK1120: 34 entités externes non résolues

Résultats:

  

Le journal de construction a été enregistré dans " fichier: // c: \ SpamCapture \ SpamCapture \ SpamCapture \ Debug \ BuildLog.htm "   SpamCapture - 44 erreur (s), 1 avertissement (s)

Était-ce utile?

La solution

La bibliothèque KeyCapture_Config.lib utilise les classes d'interface graphique MFC ( CWnd , CWinApp , etc.), mais l'application à laquelle vous associez le lien. into est une application console (voir l’option / SUBSYSTEM: CONSOLE dans la ligne de commande de l’éditeur de liens). Cela ne marchera pas. Vous devez créer un nouveau projet d'application d'interface graphique MFC et ajouter la bibliothèque à ce projet.

Modifier: je viens de vérifier le lien dans votre commentaire: http: // dynamicnetservices.com/~will/academic/textinput/keycapture/ et il semble que KeyCapture_Config est en réalité une application de dialogue MFC qui utilise la DLL KeyCapture. Il peut être possible d’utiliser KeyCapture dans une application console en créant un lien direct avec KeyCapture.lib .

Autres conseils

L'erreur de lien semble se plaindre du manque de nombreuses fonctions MFC et vos lignes de lien incluent: /NODEFAULTLIB:"nafxcwd.lib" ce qui exclurait MFC. La librairie à laquelle vous liez est-elle construite avec MFC?

Les autres choses à vérifier sont que vous compilez l'application et la bibliothèque avec le même jeu de caractères (c'est-à-dire les deux multi-octets ou les deux unicode).

Lorsque vous construisez une bibliothèque, il n'y a pas d'étape de lien. Vous pouvez donc placer une collection d'objets quelconque dans une bibliothèque sans vous soucier de ce dont ils pourraient avoir besoin.

Il semble que votre projet se lie au runtime Debug Multithreaded. Est-ce votre intention? Dans ce cas, il pourrait y avoir des incohérences avec la bibliothèque KeyCapture_Config que vous semblez utiliser.

KeyCapture_Config est-il une bibliothèque tierce? Si oui, l'avez-vous construit à partir des sources ou la lib / dll vous a-t-elle été fournie?

Des recherches sur les environnements d’exécution C / C ++ peuvent éventuellement être nécessaires. Vous pouvez faire référence à la article de la base de connaissances Microsoft qui pourrait aider à éclaircir les divergences possibles de génération d'exécution.

Je pense que Rob Walker a résolu le problème. Si la documentation de KeyCapture_Config.lib n'indique pas de liaison avec MFC, recherchez dans la source les directives exigeant une liaison avec MFC. Quelque chose comme ça:

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

entraînerait une dépendance à l'égard de MFC et le document KeyCapture_Config.lib pourrait être obsolète.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top