编译
Compile
与链接
Link
要连接要先编译,如果没编译会连接时会自动编译。举个例子,如果你有两个文件,对
一个文件进行编译只是讲这个文件编译成了目标文件
.obj
,但是另外一个文件没有,需对另
外一个文件进行编译,可以观察结果输出框的显示,这时连接便会将两个文件连接在一起,
才会将互相调用的函数等联系起来,生成
.exe
。如果不编译直接点连接,系统自动将两个文
件编译,并连接,生成
.exe
文件。
假设两个文件分别是a.cpp,b.cpp,a调用b的函数:
编译
a
:
--------------------Configuration: a - Win32 Debug--------------------
Compiling...
a.cpp
a.obj - 0 error(s), 0 warning(s)
然后编译
b
:
--------------------Configuration: a - Win32 Debug--------------------
Compiling...
b.cpp
b.obj - 0 error(s), 0 warning(s)
然后连接:
--------------------Configuration: a - Win32 Debug--------------------
Linking...
a.exe - 0 error(s), 0 warning(s)
假如编译一个后直接连接:
编译
a
:无变化
--------------------Configuration: a - Win32 Debug--------------------
Compiling...
a.cpp
a.obj - 0 error(s), 0 warning(s)
直接连接:
--------------------Configuration: a - Win32 Debug--------------------
Compiling...
b.cpp
Linking...
a.exe - 0 error(s), 0 warning(s)
如果两个都不编译,直接点连接:
--------------------Configuration: a - Win32 Debug--------------------
Compiling...
a.cpp
b.cpp
Linking...
a.exe - 0 error(s), 0 warning(s)
注意:
假如文件没有被修改的话,编译一次后不会再进行编译了,
可以直接连接,
如果
这时不编译,直接点连接,也只是连接,没有编译过程。
编译
.h
文件会提示不能编译,
因为
.h
一般存放的是函数的声明,
类的定义等,
系统不会
编译,但是可以在头文件中点连接进行整个程序的编译连接过程。
连接后就可以运行了,也可以在没编译、连接时点运行,系统会自动编译、连接。
在多道程序环境中,要想将一个用户源程序变为一个可以在内存中执行的程序,通常要经过三步依为 编译,链接,装入
首先是编译,由编译程序将用户源代码编译成若干个目标模块; 其次是链接,由链接程序将编译后形成的一组目标模块以及他们所需的库函数链接在一起,形成一个完整的装入模块,
由装入程序将装入模块装入内存
编译与链接都是为将用户程序从硬盘上调入内存并将其转换为可执行程序服务的。 用编译器时的compile 就是在进行编译,link就是链接,运行程序时可以看到的。 我对编译的理解是高级语言翻译为电脑可以理解的二进制代码也就是机器语言。 链接下面举例讲。你最好边看边画个内存的图好理解。
如,我们编写了一个程序,编译后,在作业地址空间中所得到目标模块的起始地址通常是0,假设在1000处写了一句load 1,2500 (功能是将2500单元处的数据取至寄存器1)。在多道程序环境下将程序装入内存时并不可能预先知道所编译的模块应该放在内存的何处,假设程序被装入从10000开始的地址,此时2500变成了12500,这里就出现了问题,需要修改指令中的相对地址,此时就需要链接来解决。这只是链接的一个功能。
链接分为三种,静态链接,装入时动态链接,运行时动态链接。现在流行的是运行时动态链接,这种方法不仅可加快程序的装入过程,而且节省了大量的内存空间
程序入口main函数, .c文件, 预处理阶段,(编译后)目标文件,(连接后)可执行文件,
程序源文件(.c,.cpp,.m),目标文件(.obj, .o),可执行文件(.exe).
目标文件是二进制文件。
根据语言不同,可编译源文件后缀可能不同,根据平台不同,目标文件后缀不同,windows下是.obj。
参考:http://www.cnblogs.com/laojie4321/archive/2012/03/30/2425015.html
摘自:http://wenku.baidu.com/link?url=a4mVqQ4Iku8VsfVu-VUPoX9ksPEPB_dWUcAB82QxDCNzmlAPh14J6WSKK9wW9rlfKpmbseRvg4fpA2e2uiRQwo5pYehx7ZBk2nvKlqDxNre