艾米莉·布朗宁 全裸:对编译链接的理解

来源:百度文库 编辑:九乡新闻网 时间:2024/04/20 08:48:37
有这样一个.c文件//这是在main.c文件中,其中这个文件中没有头文件,也没有任何声明,请问可以通过编译吗?int main(){   abcd();    //此函数并没有在本文件或其他文件中定义   return 0;}//end of main      在这个main.c的文件中只有5行的内容,请问 gcc -c main.c 后,会出现什么错误信息呢?答案是它不会出现任何错误信息,顺利地通过了编译。有没有搞错,调用了一个未定义,且未声明的函数,居然可以通过编译。这里我们可以了解两个感念,编译,链接。      我不敢说我对他们掌握了,只能说了解,至少对这个例子。当编译main.c文件的时候,编译器并不需要abcd()函数的二进制信息,编译器只需要知道有这样一个abcd()的外部函数,在编译出的main.o中为abcd()的二进制代码留个位置就行了,剩下的就交给链接器去做。为什么不一下编译好呢,我的个人理解是现在都讲模块化,这是趋势,至于模块的好处,我不用说,你应该也知道不少吧!将main.c编译成main.o,再将abcd.c编译成abcd.o,然后在链接 gcc ~/ab/main.o ~/ac/abcd.o -o ~/sss 我只所以这样写,是要告诉你main.o和abcd.o不必在同一个目录下,生成的可执行文件也可以放到其他目录下。