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

C语言多源文件编译出现undefined reference to `put'报错如何解决?

错误原因分析

你遇到的是链接阶段的符号未定义错误,完整报错为:

main.c:(.text+0x389): undefined reference to `put' collect2: error: ld returned 1 exit status

出现问题的核心原因有两个:

  • 直接执行gcc -o main main.c编译时,仅将main.c纳入了编译流程,没有把包含put函数实现的KeyValueStore.c一起参与编译和链接,链接器无法找到put函数的具体实现地址,因此抛出错误。
  • 你现有的CMakeLists.txt存在配置不匹配的问题:项目使用纯C语言编写,但配置了set(CMAKE_CXX_STANDARD 14)的C++标准,虽然不直接导致本次报错,但可能引发后续潜在的编译参数不兼容问题,建议调整。
修复方案

方案1:直接调整gcc编译命令

将所有相关C源文件都加入编译指令即可完成链接:

gcc -o main main.c KeyValueStore.c

方案2:使用CMake构建(推荐,你已编写好CMake配置)

不要直接调用gcc编译,走CMake标准构建流程即可自动处理多文件的编译链接逻辑:

  1. 在项目根目录创建构建文件夹并进入:
mkdir build && cd build
  1. 执行cmake生成构建配置:
cmake ..
  1. 执行编译命令:
make

编译完成后即可在build目录下得到可执行文件Demo。

可选优化(建议修改)

将CMakeLists.txt中的C++标准配置替换为C标准配置,适配纯C项目:
把set(CMAKE_CXX_STANDARD 14)修改为:

set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 06:48:10