
1
编译阶段,执行的是对单个文件的转换,从源代码转换成二进制文件。
2
链接阶段,将每个源文件转成的二进制文件,及相关的系统库文件共同打包生成可执行文件。
3
从定义上可以看出,链接阶段,出现错误有两种可能:
1)
函数中引用了不存在的函数。
2)
编译环境有问题,导致ld出错。
编译主要工作是检查一下你的源代码,看看它是否能够读懂,如果可以完全明白,就把你的源代码变成一种计算机更方便处理的文件,通常我们称为目标文件,常用后缀obj 或o,编译的工作就结束了。
链接程序的拿到目标文件后,进行装配工作。因为你设计的程序中,要不是调用自己设计的功能,要不调用系统提供的功能。链接就是把根据你程序说明的调用关系,找到相应的程序,把它们拼接起来,形成可以被 *** 作系统执行的文件,也就是可执行文件。
文件编辑的时候源码是CPP扩展名,C++头文件是H扩展名
编译源程序文件转换成obj扩展名的目标文件
链接将一个或多个目标文件与程序用到的库文件链拉起来,形成一个可以在 *** 作系统直接运行的执行程序exe
c和c++的多文件编程规则是有差别的。下面只描述c的(主要是语法要求不太一样,体现在编译层面)。
简单来说,有两个层面的问题:
1
编译问题
2
链接问题
1
编译问题:
就是你的代码要能够编译通过,编译主要是对语法的检查。例如:
1
a文件用b文件里的函数问题:在c语言中,a文件用b文件的函数,缺省不用做任何说明(缺省就是全局函数,注意不能是static函数,当然建议写上extern的引用说明)。
2
但是如果a文件要用b文件的结构体。那么必须把结构体放到头文件里,两个源文件都去include。
不罗列了,简单来说,代码要复合c的语法要求。
2
链接问题:
多个源文件可以编译成编译单元(编译做得事),并且把这些编译单元链接到一起形成最终的可执行文件或动态/静态库。
注:编译单元,o文件。
举例:有ac和bc
以gcc编译来说:(不考虑其他编译和链接情况)
gcc
-c
ac
//生成ao
gcc
-c
bc
//生成bo
gcc
-o
hello
ao
bo
//
ac和bc里面一个必须有main函数。输出hello可执行程序。
如果是在集成开发环境,例如vc、devc++、codebloker等。就在软件相关工程属性里勾选上或增加源文件就行。(工具屏蔽了编译链接技术细节)
以上就是关于C语言程序,编译时没错,链接时有个错,不知道怎么全部的内容,包括:C语言程序,编译时没错,链接时有个错,不知道怎么、C语言中编译程序和连接程序的作用和原理是什么关键是原理,越详细越好,谢了~、C语言程序经过链接以后生成的文件名的后缀为等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)