g++修改subsrc下源文件后重编,改动未体现在二进制输出中
问题排查与解决方案
根本原因
你在main.cpp中直接通过#include引入了subsrc/one.cpp文件,这会导致one.cpp的全部代码被直接编译到main.o目标文件中。你单独编译subsrc/one.cpp生成的one.o目标文件并不会被实际使用:链接器处理全局符号时会优先选择先出现的定义,你链接时main.o的顺序在one.o之前,其中已经包含了doWork函数的实现,因此one.o中的同名函数会被链接器直接忽略,你对one.cpp的改动自然不会体现在最终的二进制文件中。
验证方案
直接打开项目中的main.cpp文件,检查是否存在#include "subsrc/one.cpp"这类引入cpp文件的语句即可确认问题。
修复步骤
- 删除
main.cpp中引入one.cpp的#include语句 - 新增
subsrc/one.h头文件,将doWork等需要对外暴露的函数声明放在该头文件中 - 在
main.cpp中引入subsrc/one.h头文件即可
内容的提问来源于stack exchange,提问作者Christian Legge
相关产品推荐
相关产品推荐

