【问题标题】:LibCurl - Release Static Lib linking problemsLibCurl - 发布静态 Lib 链接问题
【发布时间】:2011-11-14 05:48:09
【问题描述】:

我已经有一段时间了。我希望有人能告诉我我做错了什么。

这些是我到目前为止所采取的步骤:

-下载了最新版本的cURL(7.21.7)。

-使用 vc6curl.dsw 在 Visual Studio 2010 中打开解决方案并将项目转换为 VS2010。

-将 libcurl 项目配置设置为“发布”并构建。构建成功。创建了一个名为“LIB-Release”的文件夹。它包含几个 obj 文件,“libcurl.lib”文件也位于此处。

测试应用:

-在项目的设置中,我将编译器指向 curl 包含(标题)。

C/C++ >> 常规 >> 附加包含目录

-在预处理器定义中添加“CURL_STATICLIB”

C/C++ >> 预处理器定义

-在我的链接器附加库依赖项中添加了“libcurl.lib”文件夹的路径

链接 >> 常规 >> 其他库目录

-在我的链接器附加依赖项中添加了“libcurl.lib”

链接 >> 输入 >> 附加依赖项

-将我的项目配置设置为“Realease”并点击构建!

我收到 42 个未解决的外部错误:

错误 65 错误 LNK1120: 42 未解决 外部 C:\Users\Nick\Documents\Visual Studio 2010\Projects\curl_static_lib\Release\curl_static_lib.exe curl_static_lib 错误 61 错误 LNK2001:无法解析的外部符号 ___WSAFDIsSet@8 C:\Users\Nick\Documents\Visual Studio 2010\Projects\curl_static_lib\curl_static_lib\libcurl.lib(select.obj) curl_static_lib 错误 59 错误 LNK2001:无法解析的外部符号 _imp_accept@12 C:\Users\Nick\Documents\Visual Studio 2010\Projects\curl_static_lib\curl_static_lib\libcurl.lib(ftp.obj) curl_static_lib 错误 46 错误 LNK2001:无法解析的外部符号 _imp_ber_free C:\Users\Nick\Documents\Visual Studio 2010\Projects\curl_static_lib\curl_static_lib\libcurl.lib(ldap.obj) curl_static_lib 错误 26 错误 LNK2001:无法解析的外部符号 _imp_bind@12 C:\Users\Nick\Documents\Visual Studio 2010\Projects\curl_static_lib\curl_static_lib\libcurl.lib(connect.obj) curl_static_lib

我也尝试过使用“调试”配置进行构建。谁能告诉我哪里出错了?

【问题讨论】:

  • 您可以尝试使用 ./winbuild 文件夹中的 Makefile.vc 或使用 ./lib 文件夹中的 Makefile.vc8(9,10) 来构建 NMAKE。只需从 VS 命令提示符运行“nmake -f ”。
  • 男人!我曾多次尝试使用 make 文件,但我没有注意到 makefile 版本 10 有一个开关
  • 如果你想添加你的答案我会检查它

标签: c++ c visual-c++ curl libcurl


【解决方案1】:

为 Windows 构建 CURL 的最佳方法是使用 NMake 和提供的 Makefile。 你可以

  1. 修改 CURL 根文件夹中的 Makefile 以设置您使用的 VC 版本,然后运行 ​​nmake vc-all(或选择任何其他适合您的 VC 目标)。检查 ./docs/INSTALL 文件的“Win32”部分。

  2. 使用 ./winbuild 文件夹中的 Makefile.vc。查看 ./winbuild/BUILD.WINDOWS.txt 了解如何使用它。

【讨论】:

  • 这行得通。我将可选参数 vc=10 添加到 nmake 的命令。这构建了一个静态 libcurl_a.lib
【解决方案2】:

这些错误意味着 libcurl 使用的函数不在链接器配置中指定的任何导入库中。

听起来至少应该有套接字导入库 (ws2_32.lib)。

请注意,如果您将 libcurl 编译为 DLL,则所有导入库都被指定为 DLL 链接的一部分,因此您的应用程序不需要导入所有这些库,只需链接 curl 导入库.您选择将 curl 编译为静态库这一事实使 curl 代码成为您应用程序的一部分,因此必须在应用程序的链接器配置中提供所有支持库。

【讨论】:

  • 这个库应该是用 libcurl 构建创建的还是你建议我需要导入其他库?
  • 你需要从系统中导入其他库,至少是ws2_32.lib,可能还有其他的,这取决于缺少哪些符号。当我得到未定义的符号时,我通常会在 msdn.xml 中找到它们。文档通常会说明符号所属的 lib,因此只需找到 curl 所需的所有依赖项即可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-08
  • 1970-01-01
  • 2011-09-20
  • 2012-07-26
  • 1970-01-01
  • 1970-01-01
  • 2020-03-22
相关资源
最近更新 更多