警告选项
- -Wall:开启大多数的警告信息
- -Wextra:开启额外的警告信息,比如参数未使用警告(-Wunused-parameter)
- -Werror:将警告当作错误,中断编译
优化选项
- -O,-O1:在不影响编译速度的前提下,尽量采用一些优化算法降低代码大小和可执行代码的运行速度
- -O2:该优化选项会牺牲部分编译速度,除了执行-O1所执行的所有优化之外,还会采用几乎所有的目标配置支持的优化算法,用以提高目标代码的运行速度
- -O3:该选项除了执行-O2所有的优化选项之外,一般都是采取很多向量化算法,提高代码的并行执行程度,利用现代CPU中的流水线,Cache等
- -Og:该标识会精心挑选部分与-g选项不冲突的优化选项,当然就能提供合理的优化水平,同时产生较好的可调试信息和对语言标准的遵循程度
调试选项
- -g:在可执行文件中保留调试信息,调试符号位于与代码/数据部分完全不同的部分中,这些部分不会在运行时加载,因此不会造成任何性能损失
符号可见性(链接选项)
- -fvisibility=hidden:默认隐藏所有符号,再手动选择哪些函数对于链接到库的用户是可见的,并通过用可见属性标记它们使它们可见
__attribute__((visibility("default")))
- -rdynamic:通知链接器将符号添加到动态符号表中,目的是能够通过使用 dlopen 来实现向后跟踪