编译错误:gcc undefined reference to

编译源码的过程及现象:

            单独编译每个 .c 文件生成 .o 目标文件都没有出错,

            将所有的目标文件链接生成可执行文件时候却提示其中的一个函数undefined reference to ;

            然后检查代码,clion的跳转功能 能定位到头文件,也能在util.c中找到函数的实现,

尝试解决的过程:

                自然是百度了,

原因一:一般都是确实未定义,这个可以排除因为都能跳转到代码实现(后面被自己打脸);

原因二:然后一个可能的 原因是链接时目标文件的摆放顺序问题,比如 1.c中实现的函数a(),

               2.c中调用a(),  但是链接时2.o 排在了1.o的前面,链接器找不到函数的实现,因而报错。

原因三:然后大部分的教程都是使用第三方库的时候报该错误的处理方案,觉得参考意义不大。

柳暗花明:

                停滞了两天之后,换个思路,想着能否知道链接错误更详细的信息,了解到nm命令,使用

nm 对 util.o 进行分析,确实没有在符号表中找到想调用的函数。遂去查代码,往上翻发现被前人用

#if 0

代码实现

#endif

在预编译阶段注释掉了。终于不再怀疑自己的基本认知了。

照例感想:

在这里面受到了困扰总体还是自己不自信,正是因为对自己的基础不自信,查询到该错误出现的原因就那几种。没有方向就会乱试。

得出的结论:代码没有玄学,无法理解要么缺乏基础,要么分析的不够细致。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容