You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

编译VC++2010版Curl 7.64.1后运行提示“HTTPS协议不支持”求助

解决curl 7.64.1发布版本HTTPS不支持的问题

我来帮你排查这个问题——旧版curl能用、新版却报「Protocol https not supported」,大概率是编译或链接环节漏了SSL相关的配置,以下是最常见的几个原因和解决步骤:

  • 编译libcurl时未启用SSL支持
    VC++2010编译curl时,默认是不开启HTTPS支持的,你需要在编译阶段明确启用SSL选项。比如用curl自带的Windows编译脚本时,要加上ENABLE_SSL=yes参数;如果用CMake配置,要勾选CURL_USE_OPENSSL(或者对应你用的SSL库选项)。
    可以通过检查编译生成的libcurl.lib来验证:用VS的dumpbin /exports libcurl.lib命令,查看是否包含CURLOPT_SSL_VERIFYPEERCURLOPT_SSL_VERIFYHOST这类SSL相关的符号,或者是否有引用OpenSSL的函数(比如SSL_connect)。如果没有,说明编译时确实没开SSL支持,需要重新编译。

  • 发布版本的链接配置不匹配
    要确保你的应用发布版本(Release)链接的是Release版本的libcurl.lib,不能混用Debug版的库。另外,还要检查CRT(C运行时库)的配置是否一致:比如libcurl编译时用的是MT(静态链接CRT),你的应用也必须设置成MT;如果libcurl用的是MD(动态链接CRT),应用也要对应设置成MD,否则会出现链接或运行时不兼容的问题。

  • 遗漏SSL依赖库的链接
    即使libcurl编译时开启了SSL,链接你的应用时还需要把SSL库也加进去。比如用OpenSSL的话,要在项目链接器的附加依赖项里加上libeay32.libssleay32.lib(注意必须是和libcurl编译时配套的Release版本)。如果没加这些库,链接阶段可能不会报错,但运行时会因为找不到SSL相关实现而无法支持HTTPS。

  • 运行时缺少必要的动态库
    如果你的libcurl是动态编译的(依赖libcurl.dll),那运行exe时需要把libcurl.dll以及对应的SSL动态库(比如libeay32.dllssleay32.dll)放到exe的同一目录,或者系统的PATH路径下。旧版可能你已经把这些dll部署好了,新版可能没同步更新,导致运行时找不到SSL相关的动态库。

  • 检查curl的初始化和协议支持
    可以在代码里加一段调试代码,确认当前curl库支持的协议:

    #include <curl/curl.h>
    #include <stdio.h>
    
    int main() {
        curl_global_init(CURL_GLOBAL_ALL);
        curl_version_info_data* info = curl_version_info(CURLVERSION_NOW);
        printf("Supported protocols: %s\n", info->protocols);
        // 其他业务代码...
        curl_global_cleanup();
        return 0;
    }
    

    运行这段代码,如果输出里没有https,那肯定是库本身没编译SSL支持,回到第一步重新编译;如果有https,那就要排查链接或运行时的依赖问题。

内容的提问来源于stack exchange,提问作者nsivakr

火山引擎 最新活动