【问题标题】:Unresolved external symbol, with static lib that uses another static lib未解析的外部符号,带有使用另一个静态库的静态库
【发布时间】:2016-06-19 16:46:31
【问题描述】:

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

建议?想法?谢谢!

【问题讨论】:

  • 听起来你正在编译动态导入但链接到静态库。
  • 点对点,在我的项目中定义 CURL_STATICLIB 解决了这个问题。谢谢!
  • 为了将来参考,未解析符号开头的__imp_ 是它泄露的原因。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-10-12
    • 2020-07-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 2017-04-13
    • 2016-01-19
    • 1970-01-01
    • 2014-03-07
    相关资源
    最近更新 更多