Iro*_*ron 9 dll static libcurl
我正在使用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'type redefinition".有人可以帮助我让libcurl工作吗?
And*_*rey 13
没有简单的答案:) Libcurl依赖于其他第三方库(它取决于您使用的二进制分发).当你摆脱DLL - 你必须手动链接相应的第三方.
好的,所以第一点是你不应该链接到libcurl.lib,因为它将你绑定到你不想要的DLL.
第二点 - 当您与libcurl_static.lib链接时(如上所述),您还必须链接到它所依赖的库.这样做的简单方法是做这样的事情:
#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
Run Code Online (Sandbox Code Playgroud)
但是这样 - 你会得到三个依赖项.或者,您可以搜索静态链接的方式,但这是一个不同的故事.
作为另一种选择 - 您可以在禁用所有不需要的功能之后从源重建libcurl_static.lib,从而删除不需要的依赖项(如INSTALL文件中的"在Win32版本中禁用特定协议 "中所述).
最后一点 - 由于libcurl对源代码的Windows编译支持很差,我建议你重新考虑摆脱curllib.dll的想法.