Clrdump (C++) erreur LNK2019: symbole externe non résolu __imp__RegisterFilter@8 référencé dans la fonction _main
Je suis à l'aide d'un makefile système avec le pvc compilateur (à l'aide de Microsoft Visual C++ 2008 compilateur) et je reçois plusieurs erreurs de liaison de la forme:
error LNK2019: unresolved external symbol __imp__RegisterFilter@8 referenced in function _main
Ce qui se passe MALGRÉ l'aide de la extern "C"
déclaration, à savoir:
extern "C" int CLRDUMP_API RegisterFilter( LPCWSTR pDumpFileName, unsigned long DumpType );
Aussi, dans le makeexe.mak, la bibliothèque est liée dans comme:
$(COMPILEBASE)\lib\clrdump.lib \
Pour être honnête, je ne suis pas un expert dans les makefiles, et je suis l'évolution sur un système à partir de Microsoft Visual C++ 6.0 pour 2008. Ce changement peut avoir quelque chose à voir avec le lien des erreurs, le système utilisé pour le travail avant.
Toute aide serait vraiment appréciée.
Merci d'Avance,
Sincèrement,
Joseph
-- Edit 1 --
Personne ne sait comment à son tour détaillé dans le makefile système de pvc?
Noter que la fonction ci-dessus est déjà un compilateur décoré à la version, ayant
__imp__RegisterFilter@8
alors que la fonction C++ est juste
RegisterFilter
Merci pour l'aide, mais si n'importe qui peut poster une solution plus complète, qui serait également très apprécié.
Sincèrement, Joseph
-- Edit 2 --
Une personne aimable posté, mais quand je me suis inscrit il a disparu:
L'imp préfixe indique que cette fonction est importée à partir d'une DLL. Vérifiez la définition de CLRDUMP_API
- est-il __declspec(dllimport)
? Voir cet article pour plus d'informations.
Il y avait un lien de travail, mais je l'ai perdu, mais je suppose que l'on peut toujours chercher le sujet.
Merci, qui que vous ont été!
-- Edit 3 --
Grâce ChrisN (je ne suis pas encore le droit de vote). Malgré l'aide du bouton actualiser votre réponse disparu, mais ensuite ré-apparu après que j'ai posté un cut-n-coller.
C'est ma définition de l':
define CLRDUMP_API __declspec(dllimport) __stdcall
Je suppose que l' __stdcall est OK?
-- Edit 4 --
Bien que j'apprécie les efforts de ceux qui ont répondu, en particulier ChrisN, au moins sur mon système en particulier, le lien d'erreur reste. Donc si quelqu'un a d'autre idée, je l'apprécierais. Merci encore.
Vous devez vous connecter pour publier un commentaire.
J'ai été la création d'un simple Win32 application c++ dans VS2005 et je commençais à avoir cette erreur:
Cette application a été en utilisant les feuilles de propriétés, par conséquent, il est obligatoire cette en-tête (prsht.h).
La solution à mon problème est le suivant: programme Propriétés→Propriétés de Configuration→éditeur de liens→Général, j'ai mis Bibliothèque Supplémentaire Répertoires à
"C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Lib"
.Également dans le programme de Propriétés→Propriétés de Configuration→éditeur de liens→ligne de Commande pour la Options Supplémentaires, j'ai ajouté
ComCtl32.Lib ComDlg32.Lib
.Mon programme est actuellement en train de compiler sans problème. Mes deux cents: vous devez identifier toutes les bibliothèques que votre programme nécessite. Astuce: vérifiez tous les en-têtes que vous avez compris, vous devez vous assurer que votre linker puisse les voir.
La
__imp_
préfixe indique que l'éditeur de liens s'attend à ce que la fonction importée à partir d'une DLL.Est le clrdump bibliothèque de cette page? Si oui, notez que
extern "C"
n'est pas utilisé dans le fichier d'en-tête fourni avec la bibliothèque. J'ai confirmé cela à l'aide de la commande suivante:qui produit la sortie suivante pour
RegisterFilter
- c'est un mutilé de la fonction C++ nom:J'ai essayé de créer un exemple de programme utilisant les clrdump.lib à l'aide de Visual Studio 2008. Voici mon code:
La construction de ce produit l'erreur liens suivante:
Le code s'appuie OK avec Visual C++ 6.0.
Avis que le
dumpbin
sortie affiche le premier paramètre àRegisterFilter
commeunsigned short const *
mais l'éditeur de liens d'erreur montrewchar_t const *
. Dans Visual C++ 6.0,wchar_t
est normalement un typedef pourunsigned short
, alors que dans les versions ultérieures, il est un type intégré.Pour contourner le problème dans Visual Studio 2008, j'ai mis le "Traiter wchar_t Intégrés de Type" option "Aucun" (spécifier
/Zc:wchar_t-
sur la ligne de commande du compilateur), et le code s'appuie sur OK.Désolé pour la confusion avec ma réponse précédente. J'espère que c'est plus utile!
J'ai récemment eu le même problème. J'ai été à l'exclusion d'une bibliothèque afin d'éviter une collision, et toutes les bestioles qui s'en alla, sauf pour les erreurs de LIEN (comme vous le décrivez). Lorsque j'ai troqué la bibliothèque pour l'autre (j'ai été à l'exclusion (ignorant) MSVCRT.lib, maintenant, je suis à l'exclusion (ignorant) LIBCMT.lib) le problème a disparu. Assurez-vous que vous n'avez pas mélangé les bibliothèques quelque part.
Dans mon cas, l'éditeur de liens n'était pas avec "impossible de trouver imp_aligned_malloc".
Bien sûr, il n'y a pas de méthode dans l'un de mes code de ce nom. Le compilateur a été ajoutant la imp. Exactement pourquoi je ne sais pas, sauf que le problème a disparu lorsque j'ai échangé les exclure (ignorer) comme décrit ci-dessus.
Essayez de démarrer avec un nouveau projet et ajoutez de nouveau votre source & fichiers d'en-tête, et de garder trace de la bibliothèques de vous exclure (ignorer). Essayez diverses combinaisons. Espérons que cela aide.
Essayez d'allumer une sortie verbeuse pour votre linker (généralement un commutateur de ligne de commande). Qui va vous montrer exactement comment l'éditeur de liens est d'essayer de résoudre le symbole, de sorte que vous pouvez voir si:
J'espère que cela aide!
Ne sais pas si c'est votre cas, mais le imp préfixe peut signifier que vous compilez un x64 bibliothèque dans un projet Win32.
À l'aide d'un .Fichier DEF
Si vous choisissez d'utiliser __declspec(dllimport) le long de avec un .Fichier DEF, vous devriez changer la .DEF fichier de DONNÉES ou de la CONSTANTE pour réduire la probabilité qu'un codage incorrect un problème:
Le tableau suivant montre pourquoi:
http://msdn.microsoft.com/en-us/library/aa271769(v=vs. 60).aspx