未解析的外部符号,使用另一个静态库的静态库

时间:2016-06-19 16:46:31

标签: c++ visual-studio linker linker-errors

我有一个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,否则会出现未解决的错误。

连连呢?思考?谢谢!

1 个答案:

答案 0 :(得分:2)

问题是您要链接到库的静态版本,但是要根据库的共享版本(DLL)进行构建。使用__declspec(export)(或.def文件)导出针对共享版本符号构建时,会导致编译器将__imp添加到导出的符号名称的开头。

解决此问题,您可以将CURL_STATICLIB添加到依赖项目的预处理器定义中,以便正确地针对静态库进行构建。

相关问题