【问题标题】:CURL Static Link Unresolved External SymbolsCURL 静态链接未解析的外部符号
【发布时间】:2018-05-22 22:49:51
【问题描述】:

我在 x64 本机工具命令提示符 Visual Studio 中使用此命令从源代码构建了 CURL 静态库

nmake /f Makefile.vc mode=static MACHINE=AMD64

我将 lib 文件夹添加到链接器库文件夹中,将 libcurl_a.lib 添加到链接器输入中,并将包含文件夹添加到其他包含目录中。我还使用了预处理器定义 CURL_STATICLIB。

库链接成功,找到了头文件。但是当我尝试编译时,我得到了 60 个未解析的外部符号。 https://hastebin.com/vukekakoti.tex

动态链接没有问题。

我该如何解决这个问题?

【问题讨论】:

  • 我遵循了构建和链接 curl 的所有说明。请解释为什么我被否决。谢谢。
  • 查看未定义的符号,找出它们属于哪些库,然后将这些库添加到链接器输入中。
  • WSA 看起来像 windows socket api,但我仍然对如何制作 DLL 并且它运行完美感到困惑,但使用 lib 无法编译。
  • 我已经删除了一些缺少的外部定义。现在我只剩下两个了。我会发布一个列表。仍然好奇为什么我的东西与 DLL 一起运行,以及如果缺少这些外部定义,为什么 DLL 甚至可以编译。
  • “我怎样才能使 DLL 完美运行” curl dll 已经链接到所有其他必要的 dll,但是静态库不能引用其他库,它们不能以这种方式工作。

标签: c++ visual-studio curl visual-studio-2017


【解决方案1】:

我缺少这些库中包含的定义:

libcurl_a.lib;ws2_32.lib;wldap32.lib;advapi32.lib;kernel32.lib;comdlg32.lib;crypt32.lib;normaliz.lib

将这些添加到您的附加依赖项中。

【讨论】:

  • 附带说明,我想知道这是否是 curl 团队的糟糕文档,或者在编译库时期望用户寻找丢失的库是否正常。
  • 我想知道这些 lib 文件来自哪里,我希望它们位于 windows 文件夹或 Visual Studio 文件夹中,但似乎都不是。
  • 为什么需要为静态库包含另一个 libcur_a.lib?
【解决方案2】:

如果使用静态链接编译 CURL,则需要在预处理器字段中指定:

CURL_STATICLIB

同样如上所述,您需要链接依赖库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    相关资源
    最近更新 更多