我正在使用 Microsoft Visual C++ 2010,我需要制作一个不需要 libcurl dll 的应用程序。我在预处理器指令中定义 CURL_STATICLIB 并链接到 libcurl.lib、libcurl_static.lib、ws2_32.lib 和 winmm.lib,但它仍然需要 dll 才能工作。如果我只链接到 libcurl_static.lib,它会出现未定义的外部符号错误。我怎样才能让它工作?
我也尝试过构建源代码,但出现了 13 个错误(哇,不幸的数字),全部显示“错误 C2011:'pollfd':'struct' 类型重新定义”。有人可以帮我让 libcurl 工作吗?
没有简单的答案:)
Libcurl 依赖于其他第三方库(它取决于您正在使用的二进制发行版)。当您摆脱 DLL 时,您必须手动链接相应的第三方。
好的,所以第一点是你不应该链接到库卷库因为它会将您绑定到您不希望绑定的 DLL。
第二点 - 当你链接时libcurl 静态库然后(如上所述)您还必须链接它所依赖的库。简单的方法是执行以下操作:
#if defined CURL_STATICLIB
#if defined _DEBUG
#pragma comment(lib, "libcurl-7.19.3-win32-ssl-msvc\\lib\\Debug\\curllib_static.lib")
#else
#pragma comment(lib, "libcurl-7.19.3-win32-ssl-msvc\\lib\\Release\\curllib_static.lib")
#endif
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "libcurl-7.19.3-win32-ssl-msvc\\libeay32.lib")
#pragma comment(lib, "libcurl-7.19.3-win32-ssl-msvc\\openldap.lib")
#pragma comment(lib, "libcurl-7.19.3-win32-ssl-msvc\\ssleay32.lib")
#endif
但这样一来,您将获得另外三个依赖项。或者,您可以寻找一种静态链接它们的方法,但这是一个不同的故事。
作为另一种选择 - 你可以重建libcurl 静态库禁用所有不需要的功能后从源中删除不需要的依赖项(如“在 Win32 版本中禁用特定协议安装文件的“)。
最后一点 - 由于 libcurl 对源代码的 Windows 编译的支持相当差,我建议您重新考虑摆脱的想法卷曲库.dll.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)