stdlib - ¿Cómo puedo deshacerme del prefijo__imp__ en el enlazador en VC++?
programacion en c++ tutorial (4)
El prefijo __imp__
aparece cuando se está vinculando a una DLL. No aparece cuando se vincula a bibliotecas enlazadas estáticamente. Lo más probable es que el código se genere para vincularlo con una biblioteca de importación de DLL, pero en su lugar, lo ha vinculado con una biblioteca estática.
El prefijo se agrega cuando marca la función importada con __declspec(dllimport)
; asegúrese de que sus importaciones no estén usando esto cuando no se vincule con una DLL.
Estoy usando libcurl y obtengo el siguiente tipo de errores de vinculador en 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)
¿Cómo puedo deshacerme de ese prefijo imp delante del nombre de la función? Me estoy vinculando a la biblioteca correcta, camino correcto, etc.
Está utilizando un archivo de encabezado que define la función prototipo con el especificador evaluando a __declspec(dllimport)
Debe redefinir la declaración que se está evaluando a esto (establecerlo en nada) o usar un archivo de encabezado diferente por completo.
Normalmente verás un código como este:
#ifdef FOO_EXPORTS
#define DLLSPEC __declspec(dllexport)
#else
#define DLLSPEC __declspec(dllimport)
#endif
...
DLLSPEC bool foo(int bar);
La compilación del proyecto con FOO_EXPORTS definido utilizará un modo y sin él utilizará el otro.
Si utiliza proyectos generados por el asistente, verifique el valor de "Configuración de tiempo de ejecución" en las project properties -> C/C++ -> Code Generation
Sección de project properties -> C/C++ -> Code Generation
.
Por defecto, por lo general, tiene un valor de "DLL multiproceso". Necesita valores de multiproceso / MT y depuración de multiproceso / MTd.
Debe agregar CURL_STATICLIB a las definiciones de preprocesador en las propiedades de sus proyectos en MSVC