链接程序时是不是需要重复编译标志?
Posted
技术标签:
【中文标题】链接程序时是不是需要重复编译标志?【英文标题】:Is it necessary to repeat compilation flags when linking a program?链接程序时是否需要重复编译标志? 【发布时间】:2014-11-04 15:40:08 【问题描述】:g++ 标志(例如用于优化的-O
和用于创建调试符号的-g
)是否会影响链接过程中的任何内容?
更具体地说,如果我将编译和链接分开(例如,在 make 文件中),并且我在编译期间提供了 -O
和 -g
标志,我是否应该在链接时也提供这些标志?
【问题讨论】:
-g 用于生成调试符号,-O 优化,即删除发布版本中没有的东西。如果您想要优化,您不应该使用 -g ,而是您的选择。如果您使用的是 make 文件,则在编译阶段完成后就不必这样做了。 @DevSolar 已更正。我的错。 @hagubear:-g
即使对于优化的代码也很有用 - 它使可执行文件更大一些,但通常不会影响性能,并且有助于调试(一些错误只出现在优化的代码)和分析(没有必要分析未优化的代码)。
【参考方案1】:
传统上,这是不必要的。然而,编译器的最新改进确实让至少优化也可以在链接时运行:LTO(链接时优化)导致编译的目标文件包含中间代码,而不是机器代码,并且中间代码将被编译为机器代码在链接时,如果每个目标文件本身包含机器代码,则可以应用无效的优化。编译的第二步受-O
等命令行选项的影响,因此您应该在链接时将它们包含在命令行中。
【讨论】:
以上是关于链接程序时是不是需要重复编译标志?的主要内容,如果未能解决你的问题,请参考以下文章