相关编译参数用途介绍

  • fvisibility-inlines-hidden:由于 inline 标识的函数不一定可用,因此需要将标识为 inline 的方法隐藏,从而不可被外部访问。
    比如在生成静态库的头文件时,不会有 inline 标识的方法。

  • fno-rtti:rtti(运行时类型识别)用于识别基类指针所指向的实际派生类类别,该功能需要在编译阶段输出相关信息来实现这一功能,
    而 no-rtti 可以减少不必要的编译工作。

  • std=gnu++14,同 std=c++14,但前者支持 GNU extensions,两者都告诉编译器支持 c++14 的新特性。

  • Wno-narrowing:不禁止长字节类型到短字节类型的转换。比如 int i = 2.2 // error: narrow conversion from double to int,但是 no-narrowing 不报错。

  • g:Debug 模式下用的选项。

  • fpic:作用于编译阶段,告诉编译器产生与位置无关代码,则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意
    位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。

  • fexceptions:启用异常处理,对于 c++ 默认开启,或者 c 代码中使用了 C++ 的异常处理代码也可以开启,对于 c 语言或者老旧的 C++ 程序可以选择关闭。

  • –disable-new-dtags:该选项是默认选项。不生成动态表中的一些新 TAGS,这些 TAGS 在老的 ELF 系统中可能无法被识别。

  • –export-dynamic:让链接器将所有符号添加到动态符号表中。

  • -pipe:以管道的方式代替可能生成的临时文件。

  • pthread:是一个链接器、处理器层面都可用的选项,作用是使用 POSIX 线程库来支持多线程,而 lpthread 仅用于链接器层面。
    -pthread 不仅会连接多线程动态库,同时会开启某些宏的开关,而 -lpthread 在某些特殊平台仅仅是用于多线程动态库的链接。
    -lpthread 选项不一定能保证多线程的支持

  • –param=ssp-buffer-size=4:用于控制 gcc 的优化行为,用法是 --param name=value;此处用于 gcc 的堆栈保护功能,即调整缓冲区在函数中使用时必须具有的最小大小

  • -unwind-tables:[the generation of static unwind tables,即生成调试信息在打印调用栈的信息时用到

  • no-strict-aliasing:在优化级别为 02 及以上时起作用,主要是保证不同类型的指针能指向同一块内存区域(比如强制类型转换),参考

  • -fno-builtin-abs:如果内建函数不以 _builtin 开头则判定为未申明函数,gcc 会对内建函数做特定的优化,以提高编译链接时间或者程序的性能
    此处主要是针对 abs() 的优化,如果内建的 abs 不是 _builtin 开头,则该 abs 函数无效。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值