我有一个C ++程序ProgramA,它是一个可执行文件,它有一个静态库,LibraryB,它依赖于另一个静态库(实际上是libcurl),它不是在我的项目中编译的。
现在,在OSX上运行正常。我确保链接libcurl和ProgramA和LibraryB编译,ProgramA运行得很好。
但是,在Windows上,我不断收到链接错误:
error LNK2019: unresolved external symbol __imp_curl_global_init referenced in function
我已将双重和三重检查我将libcurl静态库链接到项目中。实际上,在Visual Studio解决方案中,我有另一个可执行文件ProgramB,它不使用LibraryB,而是直接引用libcurl库,这很好用。除非我包含LibraryB,否则会出现未解决的错误。
连连呢?思考?谢谢!
答案 0 :(得分:2)
问题是您要链接到库的静态版本,但是要根据库的共享版本(DLL)进行构建。使用__declspec(export)
(或.def文件)导出针对共享版本符号构建时,会导致编译器将__imp
添加到导出的符号名称的开头。
解决此问题,您可以将CURL_STATICLIB
添加到依赖项目的预处理器定义中,以便正确地针对静态库进行构建。