三级优化分别做什么?
-o1:可以部分减小代码尺寸,对运行速度有一定的提高。较多地使用了寄存器变量,提高了指令的并行度,减小执行时间。
-o2:几乎包含gcc所有优化选项,但是不执行函数内嵌和循环展开。一般在生成固化代码时使用该选项较为适宜。
-o3:包含-o2的所有优化,并且还包含了解循环、函数插装和静态变量优化。通常情况下,该级优化生成的代码执行速度最快,但是代码尺寸比-o2大一些
-static是什么意思?
默认情况下, GCC在链接时优先使用动态链接库,只有当动态链接库不存在时才考虑使用
静态链接库,如果需要的话可以在编译时加上-static选项,强制使用静态链接库。
可重入目标文件与不可重入目标文件是什么?
可重入目标文件:一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下的。
ELF的特点
可执行连接文件格式,是一种比较复杂的文件格式,但其应用广泛。与linux下的其他可执行文件(a.out,cof)相比,它对节的定义和gnu工具链对它的支持使它十分灵活,它保存的足够了系统相关信息使它能支持不同平台上的交叉编译和交叉链接,可移植性很强.同时它在执行中支持动态链接共享库。
在ELF 文件头中包含了足够的平台相关信息,如数据编码方式,平台位数,硬件平台e_machine等,这些平台相关信息可在编译由编译器决定。例如,与平台位数的相关的数据结构的定义在elf.h的头文件中.
ELF可以生成一种特殊的代码——与位置无关的代码(position-independent code,PIC)。用户对gcc使用-fPIC指示GNU编译系统生成PIC代码。它是实现共享库或共享可执行代码的基础.这种代码的特殊性在于它可以加载到内存地址空间的任何地址执行.这也是加载器可以很方便的在进程中动态链接共享库。
由于gnu有大量的工具支持elf文件格式.随着gnu工具的功能的扩展.程序员对ELF文件的运用也越来越灵活。