【问题标题】:using libcurl without dll使用没有 dll 的 libcurl
【发布时间】:2010-08-05 02:08:26
【问题描述】:

我正在使用 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 工作吗?

【问题讨论】:

    标签: dll static libcurl


    【解决方案1】:

    没有简单的答案:) 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
    

    但是这样 - 你会得到另外三个依赖项。或者,您可以搜索一种静态链接它们的方法,但这是另一回事。

    作为另一种选择 - 您可以在禁用所有不需要的功能后从源重新构建 libcurl_static.lib 从而删除不需要的依赖项(如“在 Win32 构建中禁用特定协议”中所述”的 INSTALL 文件)。

    最后一点 - 由于 libcurl 对 Windows 源编译的支持很差,我建议您重新考虑摆脱 curllib.dll 的想法。

    【讨论】:

      【解决方案2】:

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

      除此之外,我只需要确保在应用程序的 Visual Studio 项目设置中设置了 libcurl.lib 和 curl 包含文件的路径。

      我使用的参考资料:

      在 Win32 版本中禁用特定协议: http://curl.haxx.se/mail/lib-2011-12/0123.html

      在 Visual Studio 中使用 libcurl(已过时): http://curl.haxx.se/libcurl/c/visual_studio.pdf

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-26
        • 2012-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多