欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

GNU常用命令

程序员文章站 2022-07-14 12:44:54
...

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]
* 目标文件:需要被链接的目标文件
相关标签: gnu gcc linux