2011-03-01 6 views
23

estoy usando libcurl y estoy recibiendo el siguiente tipo de errores de enlace en VC++ 10.¿Cómo puedo deshacerme del prefijo __imp__ en el vinculador en VC++?

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 &)" ([email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@Z) 

¿Cómo puedo deshacerme de ese imp prefijo delante del nombre de la función? Estoy enlazando con la lib derecha, la ruta correcta, etc.

+0

Relacionados (o tal vez incluso duplicados) http://stackoverflow.com/questions/3704374/linking-error-lnk2019-in-msvc-unresolved-symbols-with-imp-prefix-but-should – Suma

Respuesta

40

El prefijo __imp__ aparece cuando se está enlazando a una DLL. No aparece cuando se vincula a bibliotecas vinculadas estáticamente. Lo más probable es que el código se genere para vincularse con una lib de importación de DLL, pero en su lugar lo ha vinculado con una lib 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 esté enlazando con una DLL.

+0

sí Lo he vinculado con una lib estática, pero ¿cómo puedo vincularme con una importación de dll lib (y dónde está esta opción para vincular a un conjunto .dll?). – BeeBand

+2

Dll se acompaña con una .lib. Usted enlaza contra el dll al enlazar con este .lib que lo acompaña. Es imposible saber por nombre si el .lib es una lib estática o un dll "trampolín", para saber esto debes verificar dentro de .lib, pero el .lib necesita coincidir con tus importaciones. – Suma

+0

¡Gracias @Suma! En mi caso, había un ifdef que llevaba al '__declspec (dllimport)' aunque era una dependencia para un dll. La dependencia fue compilada como biblioteca estática, pero eso no afectó al ifdef. – Pascal

3

Está utilizando un archivo de cabecera que define el prototipo de función con el especificador de evaluar a __declspec(dllimport)

Es necesario o bien redefinir el comunicado que está evaluando a este (configurarlo para nada), o utilizar un archivo de cabecera diferente en total.

13

hay que añadir CURL_STATICLIB a definiciones del preprocesador en las propiedades de sus proyectos en MSVC

+0

En mi caso, necesitaba #include

5

Si se utiliza el asistente de proyectos generados - comprobar "la configuración de tiempo de ejecución" valor en project properties -> C/C++ -> Code Generation sección.

Por defecto, generalmente tiene el valor "Multithreaded DLL". Necesita valores multiproceso/MT y multiproceso Debug/MTd.

+0

Esto funcionó cuando recibí el error 'LINK2019'' símbolo externo no resuelto __imp_malloc' en Visual Studio 2015. Se compilaría sin '#include ' o '# incluyen 'y crash, pero cuando agregué esos obtuve el problema del símbolo externo no resuelto. – douggard

Cuestiones relacionadas