编译原理:编译选项

文章目录

全局开关

-E 只对文件进行预处理,不编译汇编和链接

-S 只对文件进行编译,不汇编和链接

-c 只编译不链接。编译器只是将输入的.c 等源代码文件生成.o 为后缀的目标文件,通

常用于编译不包含主程序的子程序文件

-o output_filename 确定输出文件的名称为 output_filename,这个名称不能和源文件同名。如果不给出这个选项, gcc 就给出预设的可执行文件 a.out

-x 指定使用语言,比如:gcc --x c++指定使用c++语言

查找目录与函数库链接

-Bprefix 这个开关指定可执行文件、库文件、包含文件和编译器自己的数据文件的存放地点。

-l library/-llibrary 进行链接时搜索名为library的库。

-Idir 把dir加入到搜索头文件的路径列表中。

-Ldir 把dir加入到搜索库文件的路径列表中。

-static 此选项将禁止使用动态库,所以,编译出来的东西,一般都很大。

-share 此选项将尽量使用动态库,所以生成文档比较小,但是需要系统由动态库

优化选项

-O0 禁止编译器进行优化。默认为此项。

-O/-O1 尝试优化编译时间和可执行文件大小。

-O2 更多的优化,会尝试几乎全部的优化功能,但不会进行"空间换时间"的优化方法。

-O3 在 -O2 的基础上再打开一些优化选项:-finline-functions, -funswitch-loops 和 -fgcse-after-reload 。

-Os 对生成文件大小进行优化。它会打开 -O2 开的全部选项,除了会那些增加文件大小的。

-fFLAG 形式的开关定义了与机器无关的标识。大多数标识都有肯定和否定的形式;"-ffoo"的否定形式为"-fno-foo"。

告警选项

-Wall 会打开一些很有用的警告选项,建议编译时加此选项。

-W/-Wextra 打印一些额外的警告信息。

-w 禁止显示所有警告信息。

-Werror 把警告当作错误。出现任何警告就放弃编译。

-Wunreachable-code 如果编译器探测到永远不会执行到的代码,就给出警告。也是比较有用的选项。

-Wredundant-decls 如果在同一个可见域内某定义多次声明,编译器就发出警告,即使这些重复声明有效并且毫无差别。

常见选项

-g

-D

-fPIC

-fstack-protector-all/-fstack-protector-strong

-Wl,--disable-new-dtags,--rpath,/libpath1:/libpath2

-Wl,-z,noexecstack

-pie --fPIE(-fpie)

相关推荐
深念Y2 天前
Makefile vs go run:Go 项目构建方式对比
java·开发语言·golang·k8s·编译·流水线·cicd
淡海水4 天前
04-02-哈希-Dictionary-TKey-TValue-上-核心数据结构
数据结构·算法·c#·哈希算法·编译·字典·dictionary
淡海水5 天前
03-05-线性-Array-List-LinkedList与Span-所有权与成本模型选型
c#·list·编译·array·clr·机器码
淡海水6 天前
03-03-线性-LinkedList-T-源码不变式与选择边界
windows·链表·c#·编译·linkedlist·clr·机器码
深念Y7 天前
SSD 寿命洁癖:编译过程不入盘的原则与实践
缓存·io·内存·编译·ssd·读取·写入
淡海水7 天前
03-02-线性-List-T-动态数组布局-扩容与操作成本
数据结构·windows·c#·list·编译·clr·机器码
拂拉氏7 天前
【Linux】 编译与动静态库相关
linux·编译·动静态库
淡海水8 天前
02-06-历史-托管GC机制-垃圾回收如何影响数据结构选择
c#·编译·gc·机器码
深念Y23 天前
tcpfwd-doc
linux·嵌入式·arm·编译·tcp·服务
深念Y1 个月前
Android-Linux折腾记录2 One API Android APK
android·linux·运维·apk·二进制·编译·oneapi