Performance g++;编译选项-g调试和-O优化

Performance g++;编译选项-g调试和-O优化,performance,compilation,g++,options,Performance,Compilation,G++,Options,我不太熟悉g++编译器,尤其是选项,例如-s、-g和-O 首先,我想请问这些方案何时生效?在编译或链接阶段?我通常会在这两个阶段中选择所有需要的选项 第二,是否有-g1、-g2、-g3选项?我知道-g在可执行文件中添加调试信息。其他人有何不同 第三,s做什么?-s、-g和-O3一起工作吗?我的目标是使可执行文件1)快速运行,2)尽可能小。你有什么建议?你不应该把重点放在选择上,而应该放在你想要实现的目标上。我对您希望实现的目标的一般性意见: 通常在快速和小型之间有一个权衡-O3意味着快。操作系

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

首先,我想请问这些方案何时生效?在编译或链接阶段?我通常会在这两个阶段中选择所有需要的选项

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


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

你不应该把重点放在选择上,而应该放在你想要实现的目标上。我对您希望实现的目标的一般性意见:

  • 通常在快速和小型之间有一个权衡-O3意味着快。操作系统意味着在不增加大小的情况下尽可能快
  • 您可以将调试信息(-g)与优化(-O3)结合使用,但由于源代码和生成的代码之间没有直接连接,因此有时信息很差
  • 如果从可执行文件中删除调试信息(-s),则无法轻松调试该可执行文件(可以单独保存调试信息,但这是另一种情况)
始终使用手册(通过在shell中键入“man g++”,或通过在internet上搜索“man g++”)并搜索选项(如果您对手册的功能很好奇)。如果您有更高级别的问题,则可以提问(例如,手册中解释了-g1和-g3之间的区别)

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


编辑:关于什么时候应用它们:通常你不担心它是什么阶段,你只需要发送选项,然后由g++来处理。当您需要更具体的内容时,您可以查看更多。

GCC的信息页(
info-GCC
)比其手册页更完整。我是否在编译阶段或链接阶段或两个阶段应用所有选项?我可以在编译阶段包含调试信息-g,然后在链接阶段应用-O3和-s吗?我不知道这是否有效…实际上,我正在编写一个生成文件。我想知道是否可以在编译中包含调试信息以创建目标文件,然后使用目标文件创建两个不同版本的可执行文件。可能吗?谢谢。我想你在延伸这个问题。是的,您可以使用“-ggdb-g3-O3-c”进行编译,如果您想链接“release”,您可以使用“-O3-s”,如果您想链接调试,您可以使用“-O3-ggdb-g3-O3”。但你为什么想要这样的东西?节省的磁盘空间(和时间)没有那么多,如果使用O3并进行调试,则不太清楚。也许你应该发布另一个问题,更好地解释你的用例。。。