bug fixed

This commit is contained in:
Dongdong Tian 2014-02-27 20:48:25 +08:00
parent d640b69043
commit 6a560eac42

View File

@ -14,12 +14,12 @@ makefile带来的好处就是——“自动化编译”一旦写好只需
关于程序的编译和链接 关于程序的编译和链接
-------------------- --------------------
在此我想多说关于程序编译的一些规范和方法一般来说无论是C、C++、还是pas首先要把源文件编译成中间代码文件在Windows下也就是\ `.obj`\ 文件UNIX下是\ `.o`\ 文件即Object File这个动作叫做编译compile。然后再把大量的Object File合成执行文件这个动作叫作链接link 在此我想多说关于程序编译的一些规范和方法一般来说无论是C、C++、还是pas首先要把源文件编译成中间代码文件在Windows下也就是\ ``.obj``\ 文件UNIX下是\ ``.o``\ 文件即Object File这个动作叫做编译compile。然后再把大量的Object File合成执行文件这个动作叫作链接link
编译时编译器需要的是语法的正确函数与变量的声明的正确。对于后者通常是你需要告诉编译器头文件的所在位置头文件中应该只是声明而定义应该放在C/C++文件中只要所有的语法正确编译器就可以编译出中间目标文件。一般来说每个源文件都应该对应于一个中间目标文件O文件或是OBJ文件 编译时编译器需要的是语法的正确函数与变量的声明的正确。对于后者通常是你需要告诉编译器头文件的所在位置头文件中应该只是声明而定义应该放在C/C++文件中只要所有的语法正确编译器就可以编译出中间目标文件。一般来说每个源文件都应该对应于一个中间目标文件O文件或是OBJ文件
链接时主要是链接函数和全局变量所以我们可以使用这些中间目标文件O文件或是OBJ文件来链接我们的应用程序。链接器并不管函数所在的源文件只管函数的中间目标文件Object File在大多数时候由于源文件太多编译生成的中间目标文件太多而在链接时需要明显地指出中间目标文件名这对于编译很不方便所以我们要给中间目标文件打个包在Windows下这种包叫“库文件”Library File),也就是\ `.lib`\ 文件在UNIX下是Archive File也就是\ `.a`\ 文件。 链接时主要是链接函数和全局变量所以我们可以使用这些中间目标文件O文件或是OBJ文件来链接我们的应用程序。链接器并不管函数所在的源文件只管函数的中间目标文件Object File在大多数时候由于源文件太多编译生成的中间目标文件太多而在链接时需要明显地指出中间目标文件名这对于编译很不方便所以我们要给中间目标文件打个包在Windows下这种包叫“库文件”Library File),也就是\ ``.lib``\ 文件在UNIX下是Archive File也就是\ ``.a``\ 文件。
总结一下源文件首先会生成中间目标文件再由中间目标文件生成执行文件。在编译时编译器只检测程序语法和函数、变量是否被声明。如果函数未被声明编译器会给出一个警告但可以生成Object File。而在链接程序时链接器会在所有的Object File中找寻函数的实现如果找不到那到就会报链接错误码Linker Error在VC下这种错误一般是\ `Link 2001错误`\ 意思说是说链接器未能找到函数的实现。你需要指定函数的Object File。 总结一下源文件首先会生成中间目标文件再由中间目标文件生成执行文件。在编译时编译器只检测程序语法和函数、变量是否被声明。如果函数未被声明编译器会给出一个警告但可以生成Object File。而在链接程序时链接器会在所有的Object File中找寻函数的实现如果找不到那到就会报链接错误码Linker Error在VC下这种错误一般是\ ``Link 2001错误``\ 意思说是说链接器未能找到函数的实现。你需要指定函数的Object File。
言归正传gnu的make有许多的内容闲言少叙。 言归正传gnu的make有许多的内容闲言少叙。