gcc 选项

1.-c选项
gcc命令后直接跟源文件会对源文件进行预处理、编译、链接生成默认名为a.out的可执行文件。而-c选项会处理到编译环节终止,生成一个目标文件,默认名为filename.o,它必须再经过链接才最终生成可执行文件。

2.-g选项
创建符号表,符号表中包含了程序中使用的变量名称的列表,可以产生带有调试信息的目标代码,即可执行文件中也会保留源码级别的变量名等信息用于调试程序。调试信息可被gdb程序用来调试程序。如果没有-g选项,调试信息中不会显示变量名、函数名等信息。

3.-I选项
后跟一个目录,该目录加入头文件搜索目录,且优先级高于系统头文件目录,因此可用自己的头文件替换系统头文件。如果有多个-I选项,则搜索顺序为从左到右。

4.-Wall选项
启用编译器的警告信息。为了写出更好的代码,此选项应该总是启用。

5.-fPIC选项
如果机器支持(PIC需要特殊支持,只能在特定机器上工作),产生PIC(位置无关代码,position-independent code),适用于动态链接且可以避免对GOT(全局偏移表,global offset table)大小的限制。

PIC(或PIE,position-independent executable)是一段机器码,它被放置到内存中,不管它的地址是什么,都能正确执行。

GOT是可执行程序或动态库程序内存的一部分,用来使被编译为ELF文件的程序正确运行,而不管在运行时程序的代码或数据在内存中的地址。

ELF(Extensible Linking Format)是可执行文件、目标文件、动态库、core dump文件格式的一种标准。它是UNIX系统实验室(USL)作为应用程序二进制接口(Application Binary Interface,ABI)而开发和发布的,也是Linux的主要可执行文件格式。

6.-shared选项
产生一个共享目标文件,它可以被其他目标文件链接来产生可执行文件。不是所有系统都支持这一选项。为了产生可预测的结果,使用-shared链接选项时,必须同时使用编译时用过的选项(如-fpic、-fPIC)。

7.-Wl,option选项
把option作为选项传给链接器。option可以是多个用逗号隔开的选项。如-Wl,-Map,output.map会把-Map output.map传给链接器。使用GNU链接器时,-Map=output.map会起到同样效果。

8.-o选项
后跟一个文件名,将主要输出放入该文件中。它可以用于任何类型的输出,包括可执行文件、目标文件、汇编程序文件、预处理的C代码文件。

如果没有使用-o选项,根据输出的文件类型不同,有默认的输出文件,如果是可执行文件,将输出放入a.out;如果是目标文件source.suffix,将输出放入source.o;如果是汇编程序文件,将输出放入source.s;如果是预编译头文件,则输出放入source.suffix.gch;如果是预处理的C源文件,则将输出到标准输出。

9.-l选项
后跟库名,链接时搜索该库。该选项最好使用-llibrary形式,而非-l library形式,因为第二种分开的格式只为了兼容POSIX。此选项会直接被GCC传递给链接器。搜索库时,会搜索固定的目录和用-L选项指定的目录。

静态库是目标文件的档案,名字通常带有.a后缀。有些也支持共享库,名字通常由.so后缀。如果静态库和共享库都找到了,链接器优先链接共享库,除非使用了-static选项。

此选项的执行结果与其在命令中的位置有关,链接器以库文件和目标文件被指定的顺序搜索并处理它们,因此,foo.o -lz bar.o会在foo.o后bar.o前搜索库z,如果bar.o中引用了z中的方法,这些方法可能不会被加载。

10.-L选项
后跟一个目录,将该目录加入到-l选项的搜索目录。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值