【问题标题】:Does RTLD_FIRST on mac do the job of RTLD_DEEP_BIND on linux?mac 上的 RTLD_FIRST 是否可以在 Linux 上完成 RTLD_DEEPBIND 的工作?
【发布时间】:2011-08-26 10:08:33
【问题描述】:

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

B()
{
   A();
}

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

【问题讨论】:

    标签: dlopen macos


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-15
        • 2017-02-01
        • 1970-01-01
        • 2017-10-17
        • 1970-01-01
        • 2011-06-17
        • 2013-10-20
        • 1970-01-01
        相关资源
        最近更新 更多