3

我对 Linux 上的 RTLD_DEEP_BIND 的理解是,如果您的主程序中有一个函数 A(),并且在动态链接库(称为 lib)中有两个函数 A() 和 B(),其中 B 定义为:

B()
{
   A();
}

然后对 B() 的调用总是会从库中调用 A 。这是 RTLD_FIRST 在 Mac 上所做的工作吗?抱歉 - 我对文档感到困惑。

4

2 回答 2

2

似乎做RTLD_DEEPBIND的是 OS X 上的默认设置。默认情况下,OS X 使用称为动态库的两级命名空间的东西。(您可以在链接时或加载时强制使用平面命名空间。)使用两级命名空间,符号引用不仅记录符号名称,还记录链接时解析符号的库。然后,在加载时,符号仅针对同一个库进行解析。

于 2014-08-08T03:08:27.137 回答
1

No.RTLD_FIRST只是一个标志,它影响dlsym使用结果句柄调用时的行为方式,同时RTLD_DEEPBIND影响加载库时符号的解析方式。它们的文档都很少,但这是我在 OSX 和 Linux 手册页上找到的信息。

于 2014-08-08T03:02:09.203 回答