J'utilise la version 64 bits de Visual Studio 2008 sur une version 64 bits de Windows. J'ai un projet qui lie à une bibliothèque (OpenCV 2.1). J'ai compilé OpenCV à partir de la source, en utilisant le même compilateur. Mon problème se produit à la fois en mode Release et Debug.Erreurs de liaison et gestion des noms en C++ avec Visual Studio 2008
Dans le volet Propriétés ou mon projet, j'ai ajouté le répertoire contenant les fichiers d'en-tête sous C/C++ -> "Additional Include Directories". J'ai ajouté le répertoire contenant les fichiers .lib aux "répertoires de bibliothèque supplémentaires", et j'ai ajouté les noms des bibliothèques à l'entrée "dépendances supplémentaires" sous Linker -> Input.
Quand je compile et lien, je reçois des erreurs dans ce style: erreur LNK2019: symbole? Externe non résolu _cvFloodFill référencé dans la fonction "Étiquette int __cdecl (classe cvImage &)" (label @@ YAHAAV $ cvImage @ M @ @@ Z)
Sous Linker-> Command Line -> Options supplémentaires, j'ai ajouté le tag:/verbose: lib et je vois dans la fenêtre de sortie du compilateur qu'il cherche et trouve la bibliothèque qui devrait contenir les fonctions (cv210d.lib). (Je regardais dans la source pour OpenCV et a constaté que la fonction en question est définie dans cette bibliothèque)
1> Liaison ...
1> Bibliothèques Recherche
1> Recherche C: \ Program Files \ OpenCV2. 1 \ lib \ cv210d.lib:
Dans la source OpenCV, la déclaration "C" externe entoure la déclaration des fonctions en question.
J'ai exécuté dumpbin/all dans le fichier de bibliothèque, et je vois les symboles suivants définis. (J'ai la chaîne d'outils GNU pour les fenêtres installées, donc je peux utiliser grep).
C: \ Programmes \ OpenCV2.1 \ lib> dumpbin/all cv210d.lib | grep cvFloodFill
732B4 __imp_cvFloodFille
732B4 cvFloodFill
1CA __imp_cvFloodFill
1CA cvFloodFill
Donc, comme vous pouvez le voir, l'éditeur de liens est à la recherche pour le symbole _cvFloodFill, mais ce n'est pas défini. seulement cvFloodFill et __imp_cvFloodFill sont définis, donc il semble qu'il se passe quelque chose de drôle qui rend le nom-mangling différent quand je compile la bibliothèque par rapport à quand j'essaye de lier.
Voilà où je suis coincé. Est-ce que j'interprète correctement cette information? Y at-il quelque chose que je dois faire pour affecter le nom-mangling? Ai-je besoin de compiler la bibliothèque avec différents drapeaux?