GNU常用命令

版权声明:本文为博主原创文章,未经博主允许不得转载。转载请注明出处:http://blog.csdn.net/neuq_jtxw007 https://blog.csdn.net/neuq_jtxw007/article/details/78065776

GNU COMMAND

1. gcc

  GCC可以用来编译C/C++、FORTRAN、JAVA、OBJC、ADA等语言的程序,功能强大。可以对源代码进行预处理、编译、汇编、链接等操作,最终生成我们需要的可执行文件。

template:
*gcc [option] [parameter]*

[option]
* null 当option不添加如下几个选项(-E  -C -S -o),则直接编译生成可执行文件
* -E 编译预处理,主要将代码中的"#"相关的代码替换掉,比如:#define  #ifdef    #elif   #endif等,添加行号
* -C 编译不链接,将预处理之后的文件进行代码优化、语义分析转换为汇编代码等
* -S 汇编,将编译之后的汇编代码转换为机器指令
* -o 指定生成的文件名,默认为a.out
* -On 优化选项,n可以取0,1,2,3,O0关闭所有优化选项,n越大优化强度越大,默认为O2
* -I 指定头文件路径
* -L 指定链接库时查找路径,多个库路径之间用冒号隔开
* -g 在编译结果中加入调试信息
* -Wall 打开gcc所有编译警告 warning all
* -Werror Make all warnings into errors,即将所有warning当error处理
* -w Inhibit all warning messages,关闭所有的warning警告
* -verbose 将整个编译链接过程的中间步骤打印出来
* -fno-common 把所有未初始化的全局变量不以COMMON块的形式处理,就相当于以强符号处理
* -fomit frame pointer 取消帧指针(Frame Pointer) ebp,通过esp直接计算帧上变量的位置。会导致帧上寻址速度变慢,无法定位函数的调用轨迹(Stack Trace)。
* -ffunction-sections 将每个函数编译到独立的代码段,一般段名为".text.[functionName]"
* -fdata-sections 将全局/静态变量编译到独立的数据段,一般段名为".data.[dataName]"
* -fno-builtin 关闭内置函数优化选项,比如GCC会将只用了一个字符串参数的"printf"替换成"puts"函数以提高运行速度,使用"-fno-builtin"可以关闭这个内值函数优化选项。
* -m32 强制使用32bit的ABI进行编译

[parameter]
* 源代码文件

2. ld

  ld命令是GNU的链接器,将目标文件链接为可执行程序,现在的链接器一般采用两步链接的方法:空间与地址分配符号解析与重定位。重定位是整个链接过程的核心。

template:
*ld  [option] [parameter]*

[option]
* -e 设置程序入口,ld链接器的默认程序入口为_start
* -o 指定链接输出文件名,默认为a.out
* -l  指定链接某个库
* -static  静态链接
* -verbose 链接时输出详细信息
* -m elf_i386 指定链接时用的链接控制脚本,默认ld链接脚本存放于/usr/lib/ldscripts/下
* -T 自己写一个链接控制脚本,指定该脚本为控制脚本

[parameter]
* 目标文件:需要被链接的目标文件

猜你喜欢

转载自blog.csdn.net/neuq_jtxw007/article/details/78065776