链接程序把所有对象文件中的机器码组合在一起,并解析它们之间的交叉引用。
它还集成了对象模块所使用的库函数的代码。
这是链接程序的一种简化表示,因为这里假定在可执行模块中,模块之间的所有链接都是静态建立的。
实际上有些链接是动态的,即这些链接是在程序执行时建立的。
链接就是链接器ld将各个目标文件组装在一起,解决符号依赖,库依赖关系,并生成可执行文件。
链接的命令。
ld –static crt1.o crti.o crtbeginT.o hello.o –start-group –lgcc –lgcc_eh –lc-end-group crtend.o
在使用gcc作为编译器时:
O1:优化编译会尝试减少代码体积和代码运行时间,但是并不会执行会花大量时间的优化操作
O2:进一步优化 GCC执行几乎所有支持的操作但不包括空间和速度之间权衡的优化。
不执行循环展开和函数“内联”优化操作;与O1相比O2将会话费更多的编译时间当然也会生成性能更好的代码。
O3:更进一步优化。O3打开O2指定的所有优化操作并且打开:
1、-finline-functions
2、-funswitch-ioops
3、-fgcse-after-reload
-static 是让 gcc 进行静态编译,也就是把所有都需要的函数库都集成进编译出来的程序上,这个程序就可以不依赖外部的函数库运行了。