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

C语言使用libcurl发送HTTP POST JSON请求出现链接错误如何解决

报错原因

你遇到的是链接阶段错误,并非代码逻辑本身有大问题:C语言引入头文件只引入了curl相关函数的声明,函数的具体实现都存在libcurl的库文件中,你编译时没有链接对应的libcurl库,所以链接器找不到所有curl相关函数的实现,就会报undefined reference错误。

另外你的代码里还有一处小问题会导致请求头不生效,下面会一并说明修正方法。


解决步骤

1. 修正编译配置,链接libcurl库

根据你使用的编译工具链调整配置:

  • 如果你用MinGW/GCC编译,编译时需要加三个参数:
    • -I 指定curl头文件所在目录,就不用在include里写绝对路径
    • -L 指定curl库文件(.a/.dll.a后缀)所在目录
    • -lcurl 告诉链接器需要链接libcurl库
      示例编译命令:
    gcc gpsapi.c -o gpsapi.exe -I"F:\Desktop\myfolder\curl\include" -L"F:\Desktop\myfolder\curl\lib" -lcurl
    
  • 如果你用Visual Studio编译,需要修改项目配置:
    • 「C/C++ → 常规 → 附加包含目录」添加curl的include文件夹路径
    • 「链接器 → 常规 → 附加库目录」添加curl的lib文件夹路径
    • 「链接器 → 输入 → 附加依赖项」添加libcurl.lib;如果是静态编译还需要在预处理器定义里加CURL_STATICLIB宏

2. 修正代码中的请求头赋值bug

curl_slist_append每次调用会返回新的链表头指针,你现在没有把返回值赋值给headers变量,headers会一直保持NULL,所有请求头都不会生效,需要修改为:

struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Accept: application/json");
headers = curl_slist_append(headers, "Content-Type: application/json");
headers = curl_slist_append(headers, "charset: utf-8");

请求结束后建议补充释放请求头内存的逻辑,在curl_easy_cleanup之前加一行:

curl_slist_free_all(headers);

3. 运行注意事项

如果你是动态链接libcurl,运行生成的exe前需要把对应的libcurl.dll放到exe同目录下,避免运行时报找不到dll的错误。

修正以上配置和代码后,你的POST请求逻辑可以正常运行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:24:03