使用不带dll的libcurl 我使用微软Visual C++ 2010,我需要做一个不需要LIcCURL DLL的应用程序。我在预处理器指令中定义了CURL_STATICLIB,并链接到libcurl.lib、libcurl_static.lib、ws2_32.lib和winmm.lib,但它仍然需要dll才能工作。如果我只链接到libcurl_static.lib,则它有未定义的外部符号错误。我怎样才能让它工作

使用不带dll的libcurl 我使用微软Visual C++ 2010,我需要做一个不需要LIcCURL DLL的应用程序。我在预处理器指令中定义了CURL_STATICLIB,并链接到libcurl.lib、libcurl_static.lib、ws2_32.lib和winmm.lib,但它仍然需要dll才能工作。如果我只链接到libcurl_static.lib,则它有未定义的外部符号错误。我怎样才能让它工作,dll,static,libcurl,Dll,Static,Libcurl,我也尝试过构建源代码,但我得到了13个错误(哇,不幸的数字),它们都说“errorC2011:'pollfd':'struct'类型重新定义”。有人能帮我让libcurl工作吗?没有简单的答案:) Libcurl依赖于其他第三方lib(它依赖于您正在使用的二进制发行版)。当您摆脱DLL时,您必须手动与相应的第三方链接 好的,第一点是,您不应该链接到libcurl.lib,因为它会将您绑定到您不想要的DLL 第二点-当您链接到libcurl\u static.lib时(如上所述),您还必须链接到它

我也尝试过构建源代码,但我得到了13个错误(哇,不幸的数字),它们都说“errorC2011:'pollfd':'struct'类型重新定义”。有人能帮我让libcurl工作吗?

没有简单的答案:) Libcurl依赖于其他第三方lib(它依赖于您正在使用的二进制发行版)。当您摆脱DLL时,您必须手动与相应的第三方链接

好的,第一点是,您不应该链接到libcurl.lib,因为它会将您绑定到您不想要的DLL

第二点-当您链接到libcurl\u 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
但是通过这种方式,您将获得另外三个依赖项。或者,您可以搜索一种静态链接它们的方法,但情况不同

作为另一种选择,您可以在禁用所有不需要的功能后从源代码中重建libcurl\u static.lib,从而删除不需要的依赖项(如安装文件的“在Win32 builds中禁用特定协议”中所述)


最后一点——由于libcurl对源代码中的windows编译的支持非常差,我建议您重新考虑摆脱curllib.dll的想法。

通过在libcurl项目和我的应用程序的预处理器指令中指定HTTP_ONLY和CURL_STATICLIB,我得到了一个libcurl的静态编译和链接版本。这消除了您可能不需要的协议所需的所有依赖关系。该应用程序现在不需要任何DLL即可工作

除上述内容外,我只需要确保libcurl.lib和curl include文件的路径是在应用程序的visual studio项目设置中设置的

我使用的参考资料:

在Win32生成中禁用特定协议:

在Visual Studio中使用libcurl(过时):