-qtwolink(仅限 C++)
适用的调用
选项 | xlc (编译 C) | xlC (编译 C++) | xlclang(编译 C) | xlclang++(编译 C++) |
---|---|---|---|---|
-qtwolink | ✓ | ✓ |
注: 此表中仅列出典型调用。 对于所有基本调用及其等效特殊调用,您可以参阅 编译器调用的完整列表 。
类别
等效编译指示
无。
用途
最小化从库和对象文件中包含的构造函数的数量,这使得生成的可执行文件更小。
当 -qnotwolink 生效时,编译器会将对象 (.o) 文件和库 (.a) 文件中定义的所有构造函数链接到可执行文件中。 这将生成更大的可执行文件。
当 -qtwolink 生效时,编译器不会将未引用的全局对象的构造函数中的编译器链接到可执行文件中,这将使生成的可执行文件更小,但链接时间更长。 如果不同版本的编译器生成的对象文件兼容,那么可以使用 -qtwolink 将这些文件链接在一起。
语法
缺省值
-qnotwolink
使用量
在使用 -qtwolink之前,请确保归档中放置的任何 .o 文件都不会更改程序的行为。
预定义的宏
无。
示例
给定包含文件
foo.h
:#include <stdio.h>
struct foo {
foo() {printf (“in foo\n”);}
~foo() {printf (“in ~foo\n”);}
};
和 C++ 程序 t.C:#include “foo.h”
foo bar;
和程序 t2.C:#include “foo.h”
main() { }
分两步编译
t.C
和 t2.C
,首先调用编译器以生成对象文件:xlc++ -c t.C t2.C
然后链接它们以生成可执行文件 a.out
:xlc++ t.o t2.o
调用 a.out 将生成:
in foo
in ~foo
如果将 AIX® ar 命令与
t.o
文件配合使用以生成归档文件 t.a
:ar rv t.a t.o
然后使用缺省编译器命令:xlc++ t2.o t.a
可执行文件的输出与上面的输出相同:in foo
in ~foo
但是,如果使用 -qtwolink 选项:
xlc++ -qtwolink t2.o t.a
没有可执行文件 a.out
的输出,因为找不到 t.C
中的构造函数 foo()
。