You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用curlpp编译成功但执行报错(退出码1),如何排查?

问题描述

我使用curlpp官方示例代码:

#include <curlpp/cURLpp.hpp>
#include <curlpp/Easy.hpp>
#include <curlpp/Options.hpp>

using namespace curlpp::options;

int main(int, char **)
{
    try
    {
        // 自动清理资源(RAII风格)
        curlpp::Cleanup myCleanup;

        // 创建请求对象
        curlpp::Easy myRequest;

        // 设置请求URL
        myRequest.setOpt<Url>("http://example.com");

        // 发送请求,默认输出到标准输出
        myRequest.perform();
    }

    catch(curlpp::RuntimeError & e)
    {
        std::cout << e.what() << std::endl;
    }

    catch(curlpp::LogicError & e)
    {
        std::cout << e.what() << std::endl;
    }
    
  return 0;
}

我已安装curl和curlpp库,编译时链接了curl.dll.a和curlpp.dll.a,编译命令如下:

g++ http_demo_1.cpp -o myprogram -L"C:\msys64\mingw64\lib" -lcurlpp -lcurl

运行程序时执行命令:

./myprogram

编译无错误,但程序无法正常执行,VSCode终端仅显示:

Command executed and failed. Exit code 1

无其他输出,请问遗漏了什么?


可能的原因与解决方法
  • 动态库缺失:编译时链接的是静态导入库.dll.a,但运行时需要对应的curl.dll和curlpp.dll文件。把这两个dll放到程序可执行文件同目录下,或者将它们所在的路径(比如C:\msys64\mingw64\bin)添加到系统环境变量PATH中。
  • 终端输出缓冲问题:程序可能已执行,但标准输出被缓冲未及时显示。可以在main函数末尾添加std::cout << std::flush;,或者编译时加上-D_NOWIN32禁用Windows特定的缓冲行为。
  • 网络或权限问题:先测试能否正常访问目标地址,在终端执行curl http://example.com,排查是否存在网络连通性、代理配置或权限限制问题。
  • 异常捕获不全面:扩展异常捕获范围,确保所有异常都能被捕获并输出信息:
    catch(std::exception & e)
    {
        std::cout << e.what() << std::endl;
    }
    catch(...)
    {
        std::cout << "未知异常" << std::endl;
    }
    
  • 终端环境限制:直接到程序所在目录的CMD或PowerShell中运行myprogram.exe,避开VSCode终端的环境限制,查看是否有更详细的错误提示。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 20:15:10