【问题标题】:g++ compile options -g debug and -O optimizationg++ 编译选项 -g 调试和 -O 优化
【发布时间】:2012-09-05 08:56:30
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我是在编译阶段还是链接阶段或两个阶段都应用所有选项?我可以在编译阶段包含调试信息 -g,然后在链接阶段应用 -O3 和 -s 吗?我不知道这会起作用...
  • 实际上,我正在编写一个 Makefile。我想知道是否可以在编译中包含调试信息以创建目标文件,然后使用目标文件创建两个不同版本的可执行文件。可能吗?谢谢。
  • 我认为您正在扩展这个问题。是的,您可以使用“-ggdb -g3 -O3 -c”进行编译,然后如果要链接“发布”,请使用“-O3 -s”,如果要链接以进行调试,请使用“-O3 -ggdb -g3 -O3”。但你为什么想要这样的东西?节省的磁盘空间(和时间)并没有那么多,如果你使用 O3 和调试它不是很清楚。也许你应该发布另一个问题来更好地解释你的用例......

标签: performance compilation g++ options


【解决方案1】:

您不应该专注于选项,而应该专注于您想要实现的目标。关于您想要实现的目标,我的一般意见:

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

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

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

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

【讨论】:

  • GCC 的信息页面 (info gcc) 比它的手册页要完整得多。
猜你喜欢
  • 2011-12-27
  • 1970-01-01
  • 2012-02-12
  • 1970-01-01
  • 1970-01-01
  • 2017-11-06
  • 1970-01-01
  • 2011-06-07
  • 2015-11-23
相关资源
最近更新 更多