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

Makefile混合编译C和C++文件出现undefined reference报错如何解决

问题原因
  • 核心错误是你的Makefile中CXXFLAGS缺少-c编译选项:
    你在C语言编译参数CFLAGS中明确加了-c,作用是仅执行编译流程、不触发链接,生成后缀为.o的目标文件。但C编译参数CXXFLAGS没有加-c,导致编译main.cpp时g直接执行了编译+链接全流程,此时还没有编译linked_list.c生成对应的目标文件,自然找不到所有C语言实现的链表函数定义,报未定义引用错误。
  • 次要问题:你把GDB_OPT的定义写在了CFLAGS、CXXFLAGS引用它的位置之后,会导致编译参数中的-g不生效,无法生成调试符号。
修复方案
  1. 修改Makefile中的CXXFLAGS配置,补充-c参数:
# 修改前
CXXFLAGS        += $(GDB_OPT) -Wall
# 修改后
CXXFLAGS        += $(GDB_OPT) -Wall -c
  1. 调整GDB_OPT定义的位置,放到CFLAGS和CXXFLAGS声明之前,确保调试参数生效:
# 调整后顺序
GDB_OPT     := -g
CC          := gcc
C99         := -std=c99
CFLAGS          += $(GDB_OPT) -Wall -c

CXX         := g++
CXX11       := -std=c++11
CXXFLAGS        += $(GDB_OPT) -Wall -c
  1. 执行make clean清理旧的构建产物后重新执行make即可正常构建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:06:03