通常(不含该选项)情况下,C++ 编译器会链接多个系统库以支持 C++ 程序。使用该选项时,用于链接缺省系统支持库的 -llib 不会传递给 ld。
通常情况下,编译器按照以下顺序链接系统支持库:
在标准模式(缺省模式)下:
-lCstd -lCrun -lm -lc |
兼容模式 (-compat):
-lC -lm -lc |
- l 选项的顺序非常重要。-lm 选项必须位于 -lc 之前。
如果指定了 -mt 编译器选项,编译器通常先与 -lthread 链接,然后再与 -lm 链接。
要确定在缺省情况下将链接哪些系统支持库,请使用 -dryrun 选项进行编译。例如,以下命令的输出:
example% CC foo.cc -xarch=v9 -dryrun |
在输出中包括了以下内容:
-lCstd -lCrun -lm -lc |
对于符合 C 应用程序二进制接口的基本编译(即只支持 C 所需的 C++ 程序),请使用:
example% CC– xnolib test.cc– lc |
要将 libm 静态链接到具有通用体系结构指令集的单线程应用程序中,请使用:
标准模式下:
example% CC -xnolib test.cc -lCstd -lCrun -Bstatic -lm -Bdynamic -lc |
兼容模式下:
example% CC -compat -xnolib test.cc -lC -Bstatic -lm -Bdynamic -lc |
使用 -xarch=v9、-xarch=v9a 或 -xarch=v9b 链接时,某些静态系统库(如 libm.a 和 libc.a)不可用。
如果指定了 – xnolib,就必须按给定顺序手动链接所有必需的系统支持库。必须最后链接系统支持库。
如果指定了 -xnolib,则忽略 -library。
许多 C++ 语言功能要求使用 libC(兼容模式)或 libCrun(标准模式)。
系统支持库的集合不稳定,会因不同的发行版本而更改。
–library、– staticlib 和 –l。