16

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

首先,请问这些选项什么时候生效?在编译或链接阶段?我通常把我需要的所有选项都放在两个阶段。

其次,是否有 -g1、-g2、-g3 选项?我知道 -g 在可执行文件中添加调试信息。其他人有何不同?

第三,-s有什么作用?-s、-g 和 -O3 可以一起工作吗?我的目标是使可执行文件 1)快速运行,2)尽可能小。你有什么建议?

4

1 回答 1

20

您不应该专注于选项,而应该专注于您想要实现的目标。我对您想要实现的目标的一般评论:

  • 通常在快速和小型之间进行权衡。-O3 表示快。os 表示在不增加大小的情况下尽可能快。
  • 您可以将调试信息 (-g) 与优化 (-O3) 一起使用,但有时信息很差,因为源代码和结果代码之间没有直接联系
  • 如果您从可执行文件中删除调试信息 (-s),您将无法轻松调试该可执行文件(您可以单独保存调试信息,但这是另一回事)

始终使用手册(通过在 shell 中键入“man g++”或通过在互联网上搜索“man g++”来访问)并搜索选项,如果您对它的作用感兴趣的话。如果你有更高级别的问题,那么你可以问(例如手册中解释了 -g1 和 -g3 之间的区别)

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

编辑:关于何时应用它们:通常你不用担心它是什么阶段,你只需发送选项,g++ 会处理它们。当你想要更具体的东西时,你可以检查更多。

于 2012-09-12T11:01:56.843 回答