g ++编译选项-g debug和-O optimization

jas*_*n.Z 12 performance compilation g++ options

我不太熟悉g ++编译器,尤其是选项,例如-s,-g和-O.

首先,我可以问这些选项何时生效?在编译或链接阶段?我通常会在两个阶段都提出我需要的所有选项.

其次,有-g1,-g2,-g3选项吗?我知道-g在to executable中添加了调试信息.其他人有何不同?

第三,-s做什么?-s,-g和-O3一起工作?我的目标是使可执行文件1)快速运行,2)如果可能的话,小尺寸.你有什么建议?

vla*_*ima 14

您不应该关注选项,而应关注您想要实现的目标.关于你想要实现的目标的一般评论:

  • 通常在快速和小速度之间进行权衡.-O3意味着快速.Os意味着尽可能快地增加尺寸.
  • 您可以使用调试信息(-g)进行优化(-O3),但有时信息很差,因为源和结果代码之间没有直接连接
  • 如果从可执行文件中删除调试信息(-s),您将无法轻松调试该可执行文件(您可以单独保存调试信息,但这是另一个故事)

总是使用手册(通过在shell中输入"man g ++"来访问,或者通过在互联网上搜索"man g ++")来搜索选项,如果你是古玩它会做什么.如果您有更高级别的问题,那么您可以询问(例如,手册中解释了-g1和-g3之间的区别)

建议:使用-O3.如果您不断开发程序并使用GDB作为调试器使用:-ggdb -g3.

编辑:关于何时应用它们:通常你不担心它的阶段,你只需发送选项,g ++就会处理它们.如果您想要更具体的东西,那么您可以查看更多.