binding 必须是下列值之一:
值 |
含义 |
---|---|
dynamic |
指示链接编辑器查找 liblib.so(共享)文件,如果未找到这些文件,则查找 liblib.a(静态非共享)文件。当链接需要共享库绑定时,请使用该选项。 |
static |
指示链接编辑器只查找 liblib.a(静态非共享)文件。当链接需要非共享库绑定时,请使用该选项。 |
symbolic |
如果可能,则强制在共享库中解析符号(即使符号已经在别处定义)。 请参见 ld(1) 手册页。 |
(–B 和 binding 值之间不能有空格。)
如果没有指定 -B,则使用 –Bdynamic。
要静态链接 C++ 缺省库,请使用 –staticlib 选项。
-Bstatic 和 -Bdynamic 选项会影响缺省情况下提供的库的链接。为了确保动态链接缺省库,最后使用的 –B 应该是 –Bdynamic。
在 64 位环境中,许多系统库只能用作共享动态库。其中包括 libm.so 和 libc.so(不提供 libm.a 和 libc.a)。因此,在 64 位 Solaris 操作系统中,-Bstatic 和 -dn 可能会导致产生链接错误。这些情况下应用程序必须与动态库链接。
以下编译器命令链接 libfoo.a,即使 libfoo.so 存在也是如此,所有其他库都是动态链接的:
example% CC a.o –Bstatic –lfoo –Bdynamic |
对于包含 C++ 代码的程序,切勿使用 -Bsymbolic,而应使用链接程序映射文件。
如果使用 -Bsymbolic,不同模块中的引用会绑定到应是一个全局对象内容的不同副本。
异常机制依赖对地址的比较。如果您具有某项内容的两个副本,它们的地址就不等同且异常机制可能失败,这是由于异常机制依赖对假设为唯一地址内容的比较。
如果在不同的步骤中进行编译和链接,并要使用 -Bbinding 选项,就必须在链接步骤中包括该选项。
–nolib、–staticlib、ld(1)、12.5 静态链接标准库和《链接程序和库指南》