J'utilise libcurl et j'obtiens le type d'erreurs de l'é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 fais un lien vers la bonne bibliothèque, le bon chemin, etc.
Le préfixe __imp__
Apparaît chaque fois que vous vous liez à une DLL. Il n'apparaît pas lors de la liaison à des bibliothèques liées statiquement. 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.
Vous devez ajouter CURL_STATICLIB à Définitions du préprocesseur dans les propriétés de vos projets dans MSVC
Si vous utilisez des projets générés par l'assistant - vérifiez la valeur "Paramètres d'exécution" dans project properties -> C/C++ -> Code Generation
section.
Par défaut, il a généralement la valeur "DLL multithread". Vous avez besoin des valeurs Multithreaded/MT et Multithreaded Debug/MTd.
Vous utilisez un fichier d'en-tête qui définit le prototype de la fonction avec le spécificateur évaluant en __declspec(dllimport)
Vous devez soit redéfinir l'instruction qui évalue cela (ne la définir sur rien), soit utiliser un fichier d'en-tête différent.
En général, vous verrez du code comme celui-ci:
#ifdef FOO_EXPORTS
#define DLLSPEC __declspec(dllexport)
#else
#define DLLSPEC __declspec(dllimport)
#endif
...
DLLSPEC bool foo(int bar);
La compilation du projet avec FOO_EXPORTS défini utilisera un mode et sans lui utilisera l'autre.