56 votes

Comment puis-je me débarrasser du préfixe __imp__ dans l'éditeur de liens dans VC++ ?

J'utilise libcurl et j'obtiens le type d'erreurs d'éditeur de liens suivant dans VC++ 10.

 1>main.obj : error LNK2019: unresolved external symbol __imp__curl_easy_strerror referenced in function "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl curl_httpget(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?curl_httpget@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABV12@@Z)

Comment puis-je me débarrasser de ce préfixe imp devant le nom de la fonction ? Je crée un lien vers la bonne lib, le bon chemin, etc.

83voto

Suma Points 11966

Le __imp__ apparaît chaque fois que vous vous connectez à une DLL. Il n'apparaît pas lors de la liaison à des bibliothèques liées de manière statique. Très probablement, le code est généré pour être lié à une bibliothèque d'importation DLL, mais vous l'avez plutôt lié à une bibliothèque statique.

Le préfixe est ajouté lorsque vous marquez la fonction importée avec __declspec(dllimport) - assurez-vous que vos importations ne l'utilisent pas lorsqu'elles ne sont pas liées à une DLL.

22voto

Kostya Trushnikov Points 181

Vous devez ajouter CURL_STATICLIB aux définitions de préprocesseur dans les propriétés de vos projets dans MSVC

12voto

Mahmoud Al-Qudsi Points 14815

Vous utilisez un fichier d'en-tête qui définit le prototype de fonction avec le spécificateur évalué à __declspec(dllimport)

Vous devez soit redéfinir l'instruction qui évalue cela (la définir sur rien), soit utiliser un fichier d'en-tête complètement différent.

En règle générale, vous verrez un code comme celui-ci :

 #ifdef FOO_EXPORTS
#define DLLSPEC __declspec(dllexport)
#else
#define DLLSPEC __declspec(dllimport)
#endif

...

DLLSPEC bool foo(int bar);

Compiler le projet avec FOO_EXPORTS défini utilisera un mode et sans cela utilisera l'autre.

8voto

Alfishe Points 347

Si vous utilisez des projets générés par l'assistant - vérifiez la valeur "Paramètres d'exécution" dans la section project properties -> C/C++ -> Code Generation .

Par défaut, il a généralement la valeur "DLL multithread". Vous avez besoin des valeurs Multithread /MT et Multithread Debug /MTd.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X