头文件已声明的函数编译时提示未定义是什么原因?如何解决?
问题产生原因
这是典型的链接阶段错误,和编译阶段无关:
- IDE能正常识别函数签名是因为头文件
my_make.h里存在printSomething的声明,IDE的代码索引能正常读到这个声明; - 你的CMake构建配置没有把包含
printSomething实现的printer.c加入到prob1目标的源文件列表里,所以编译时只生成了readMake.c的目标文件,链接器找不到printSomething的具体实现,就抛出了undefined reference报错。
解决方法
- 如果你要手动直接编译验证代码正确性,执行如下命令即可:
gcc readMake.c printer.c -o prob1.exe
编译完成后直接运行生成的可执行文件就能正常输出结果。 - 如果你要继续用CMake构建,修改项目根目录的
CMakeLists.txt文件:
找到add_executable(prob1 xxx.c)这一行,原来的配置里应该只写了readMake.c,把printer.c补充进去,修改后如下:add_executable(prob1 readMake.c printer.c)
修改完成后重新运行cmake生成构建脚本,再执行make命令就能正常编译通过。
内容的提问来源于stack exchange,提问作者Someone Random
相关产品推荐
相关产品推荐

