在不设置 -xipo_build 的情况下生成 -xipo 涉及通过编译器的两次传递,一次是在生成对象文件时,再一次是随后在链接时执行跨文件优化时。设置 -xipo_build 可避免初始传递期间的优化而仅在链接时优化,从而缩短编译时间。无需对对象文件进行优化,与 -xipo 一样,将在链接时执行优化。如果使用 -xipo_build 生成的未优化对象文件链接起来而未包括 -xipo 来执行优化,则应用程序将因无法解析的符号错误而无法链接。
以下示例将执行 .o 文件的快速生成,后跟链接时跨文件优化:
% cc -O -xipo -xipo_build -o code1.o -c code1.c % cc -O -xipo -xipo_build -o code2.o -c code2.c % cc -O -xipo -o a.out code1.o code2.o
-xipo_build 将在创建 .o 文件时禁用 -O,以快速生成这些文件。链接时将执行完全 -O 优化,作为 -xipo 跨文件优化的一部分。
以下示例在不使用 -xipo 的情况下执行链接。
% cc -O -o a.out code1.o code2.o
如果使用 -xipo_build 生成了 code1.o 或 code2.o,结果将发生链接时故障,指明符号 __unoptimized_object_file 无法解析。
单独生成 .o 文件时,缺省行为是 -xipo_build=no。但是,当从源文件的一次传递中生成可执行文件或库时,将隐式启用 -xipo_build。例如:
% cc -fast -xipo a.c b.c c.c
将为生成 a.o、b.o 和 c.o 的第一次传递隐式启用 -xipo_build=yes。包括选项 -xipo_build=no 可禁用该行为。