C语言调试过程中duplicate symbol错误分析

版权声明:此文章转载自_infocool

原文链接:http://www.infocool.net/kb/CPlus/201610/198379.html

如需转载请联系听云College团队成员小尹 邮箱:yinhy#tingyun.com

说明:在我们调试C语言的过程中,经常会遇到duplicate symbol错误(在Mac平台下利用Xcode集成开发环境)。如下图:

1.jpg

一.简单分析一下C语言程序的开发步骤。

2.jpg

由上图我们可以看出C语言由编写源程序->编译->链接->运行几个步骤进行。

编写源程序:

C语言的源文件的扩展名为.c,源文件以ASCII的形式存储,不能直接被计算机执行。

编译:

1.把C语言源程序翻译成计算机可以识别的二进制代码,由编译器完成。

2.编译的同时进行语法检查,如果发现语法错误,则编译失败。如果编译成功,生成扩展名为“.obj”的目标文件。

3.每个源文件是单独进行编译的,如果一个项目中有多个.c源文件,则会生成多个.obj目标文件。

链接:

1.将所有有关联的obj目标文件,及系统提供的C库函数等组合在一起生成可执行文件。

2.生成的可执行文件的文件名与源程序文件名形同,计算机可以直接执行。

运行:

双击即可运行生成的可执行文件。

二.错误原因

源文件中引入的另一个源文件。

例如:在main.c中#include<test.c>

三.错误分析

由于编译的过程是对每个源文件单独进行编译的,如果单个源文件没有语法错误,编译就会通过。而链接过程是将所有有关联的obj目文件及系统的库函数组合在一起。而include预处理指令类似与代码的拷贝,并且C语言默认情况下不允许重复定义函数,因此引入的源文件中函数在链接时会报重复定义的错误。也就是我们看到的duplicate symbol错误。

小伙伴们,以后要注意了,在C语言开发中,不允许在源文件中引入其他的源文件,只可以引入头文件呦! 


想阅读更多技术文章,请访问听云技术博客,访问听云官方网站感受更多应用性能优化魔力。

关于作者

coco秋洁

我爱学习,学习使我快乐

我要评论

评论请先登录,或注册