链接时优化是一种优化模式,让编译器对整个程序具有可见性。优化发生在链接时,而不是像其他优化级别那样发生在编译时。
应使用 --opt_level=4 选项调用链接时优化。此选项必须放在命令行上的 --run_linker (-z) 选项之前,因为编译器和链接器都会参与链接时优化。在编译时,编译器将正在编译的文件的中间表示形式嵌入到生成的目标文件中。在链接时,从包含此表示形式的每个目标文件中提取此表示形式,并用于优化整个程序。
如果使用 --opt_level=4 (-O4),则不能同时使用 --program_level_compile 选项,因为链接时优化提供了与程序级优化相同的优化机会(节 3.4)。链接时优化具有以下优点:
- 每个源文件都可以单独编译。程序级编译的一个问题是其要求所有源文件都要一次性传递给编译器。这通常需要对客户的构建过程进行重大修改。使用链接时优化,所有文件都可以单独编译。
- 自动处理对程序集的 C/C++ 符号的引用。在进行程序级编译时,编译器不知道符号是否被外部引用。当在最后一个链接中执行链接时优化时,链接器可以确定哪些符号被外部引用,并在优化过程中防止消除这些符号。
- 第三方目标文件可以参与优化。如果第三方供应商提供了使用 --opt_level=4 选项编译的目标文件,这些文件将与用户生成的文件一起参与优化。这包括作为TI 运行时支持的一部分提供的目标文件。未使用 –opt_level=4 编译的目标文件仍可在执行链接时优化的链接中使用。未使用 –opt_level=4 进行编译的那些文件则不参与优化。
- 可以使用不同的选项集编译源文件。对于程序级编译,必须使用相同的选项集编译所有源文件。借助链接时优化,可以使用不同的选项来编译文件。如果编译器确定两个选项不兼容,就会发出错误。