gcc编译过程:从最贴近人的语言一步步变成能被机器听懂的语言
.c与.cpp文件,有程序员撰写
预处理后编译,得到.i文件。-E为预处理命令;-o为编译命令,但非常多功能
#开头的为预处理命令
汇编后,得到.s文件。-c为汇编命令
PS:如果出现头文件找不到的情况,可以在一句gcc命令后面以"./"开头指定查找头文件的文件目录,如gcc -c -o main.o main.c -I ./。"./"表示本地目录。
链接后,得到.o文件。
PS:不同的交叉编译器工具链的前缀不同,如arm-linux-gcc
为什么会有这么多复杂的操作呢?其实这些步骤已经相当简化了。最早的程序员都是像电工一样,不停地拨弄开关和电线的。后来变成了打孔地纸带来保存仅包含0与1的代码,不经过长时间专业的训练,肯定是看不懂的。因此,程序员必须要记住机器码,而机器码显然是非人性化的。为方便记住,便提出了”英文助记符“,也就是汇编语言。最后才出现了高级语言,所以我们现在学的其实是最简单的部分,而复杂的编译过程也不过是机器希望试图自己语言的最后一丝抵抗而已。
关于头文件的一些小tips
头文件:<> 会令计算机在指定的目录中寻找,也可以用‘-I(i的大写) dir’的方式指定目录
库文件:-l(L的小写) 会在指定的lib目录下找,也可以用-L dir指定目录寻找
运行时的动态库:so 会有一个默认目录,也可以用 LD_LIBRARY_PATH=' ' 来指定