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

定义_GNU_SOURCE后出现undefined reference编译错误该如何解决

编译报错原因
  • 核心问题是链接参数顺序错误:GCC 采用的 GNU ld 链接器默认从左到右解析符号依赖,依赖库必须放在调用其函数的源文件/目标文件之后。你当前的编译命令把数学库-lm、PostgreSQL 客户端库-lpq放在了源文件my_program.c前面,链接器加载库时还没有解析到源文件中对log10(属于libm)、PQntuples(属于libpq)的调用,会直接丢弃库中未被引用的符号,后续解析到源文件的函数调用时就会报未定义错误。
  • 你的_GNU_SOURCE宏定义放在所有头文件之前的写法是正确的,不需要修改代码头文件部分的逻辑。
解决方法

直接调整编译命令的参数顺序,将源文件放在依赖库之前即可:

gcc -Wall -Wextra -I/home/userX/postgresql/include -L/home/userX/postgresql/lib -g my_program.c -lm -lpq
额外注意事项

你提供的示例代码存在两个小问题,可自行修正避免后续报错:

  • 代码中使用的db_str变量未提前定义,可在sprintf前添加char db_str[256] = {0};定义足够长度的字符串缓冲区。
  • 示例中调用的DBConnect如果是你自行封装的接口,需要将对应的实现文件也加入编译参数,若直接使用libpq原生接口,替换为PQconnectdb(db_str)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:36:01