Oracle Solaris Studio 12.2:C++ 用户指南

A.2.3 –Bbinding

指定 链接的库绑定是symbolicdynamic(共享)还是 static(非共享)。

可以在命令行上多次使用 –B 选项。该选项传递给链接程序 ld


注 –

在 Solaris 64 位编译环境中,许多系统库只能用作动态库。因此,请勿在命令行上将 -Bstatic 用作最后一个切换开关。


A.2.3.1 值

binding 必须是下列值之一:

值 

含义  

dynamic

指示链接编辑器查找 liblib.so(共享)文件,如果未找到这些文件,则查找 liblib.a(静态非共享)文件。当链接需要共享库绑定时,请使用该选项。

static

指示链接编辑器只查找 liblib.a(静态非共享)文件。当链接需要非共享库绑定时,请使用该选项。

symbolic

如果可能,则强制在共享库中解析符号(即使符号已经在别处定义)。 

请参见 ld(1) 手册页。

–Bbinding 值之间不能有空格。)

缺省值

如果没有指定 -B,则使用 –Bdynamic

交互

要静态链接 C++ 缺省库,请使用 –staticlib 选项。

-Bstatic-Bdynamic 选项会影响缺省情况下提供的库的链接。为了确保动态链接缺省库,最后使用的 –B 应该是 –Bdynamic

在 64 位环境中,许多系统库只能用作共享动态库。其中包括 libm.solibc.so(不提供 libm.alibc.a)。因此,在 64 位 Solaris 操作系统中,-Bstatic-dn 可能会导致产生链接错误。这些情况下应用程序必须与动态库链接。

示例

以下编译器命令链接 libfoo.a,即使 libfoo.so 存在也是如此,所有其他库都是动态链接的:


example% CC a.o –Bstatic –lfoo –Bdynamic

警告

对于包含 C++ 代码的程序,切勿使用 -Bsymbolic,而应使用链接程序映射文件。

如果使用 -Bsymbolic,不同模块中的引用会绑定到应是一个全局对象内容的不同副本。

异常机制依赖对地址的比较。如果您具有某项内容的两个副本,它们的地址就不等同且异常机制可能失败,这是由于异常机制依赖对假设为唯一地址内容的比较。

如果在不同的步骤中进行编译和链接,并要使用 -Bbinding 选项,就必须在链接步骤中包括该选项。

另请参见

–nolib–staticlibld(1)、11.5 静态链接标准库《链接程序和库指南》