【问题标题】:Any way to change linking to avoid the LD_PRELOAD on HPUX?有什么方法可以更改链接以避免 HPUX 上的 LD_PRELOAD?
【发布时间】:2009-04-23 14:54:33
【问题描述】:

我想我明白为什么在加载多线程应用程序时需要LD_PRELOAD set,该应用程序加载加载 libcl.2 的单线程库,但我想知道是否可以使用一些链接器设置来避免这种情况。任何帮助表示赞赏。

更新:

Perl 加载 动态 /usr/lib/libc.2 Perl 加载 DB2.sl DB2 尝试加载 动态 /usr/lib/libcl.2

可能是事实已经加载了具有该共享对象名称的内容然后失败。

/usr/lib>密码

/usr/lib

/usr/lib>ls -lt | grep libcl.2

-r-xr-xr-x 1 bin bin 1261568 2003 年 2 月 14 日 libcl.2

lrwxr-xr-x 1 根系统 2002 年 11 月 21 日 9 日 libcl.sl -> ./libcl.2

现在,chattr 输出可能解释了拒绝去寻找同名内容的原因:

两者都设置了禁用字段,因此它们不会在环境中查看,也不会使用备用名称

在 perl 上聊天 perl:

     shared executable
     shared library dynamic path search:
         SHLIB_PATH     disabled  second
         embedded path  disabled  first  Not Defined
     shared library list:
         dynamic   /usr/lib/libnsl.1
         dynamic   /usr/lib/libnm.sl
         dynamic   /usr/lib/libdld.2
         dynamic   /usr/lib/libm.2
         dynamic   /usr/lib/libsec.2
         dynamic   /usr/lib/libpthread.1
         dynamic   /usr/lib/libc.2

在 DB2.sl 上聊天 DB2.sl:

     shared library
     shared library dynamic path search:
         SHLIB_PATH     disabled  second
         embedded path  disabled  first  Not Defined
     shared library list:
         dynamic   /opt/IBM/db2/V8.1/lib/libdb2.sl
         dynamic   /usr/lib/libcl.2

是否可以调整其中一个库的聊天设置?

更新:为什么不让它们使用相同的库名称。

【问题讨论】:

    标签: c multithreading linker


    【解决方案1】:

    取决于您的编译器/链接器(想想我十多年前登录的 HPUX 机器让我不寒而栗),--rpath 可能会有所帮助:据我了解,在您的情况下,rtld 正在寻找错误的位置首先,这就是为什么要预加载其他版本的库的原因,对吧?在这种情况下,rpath 会在编译后的二进制文件中嵌入一个额外的搜索位置,您可以使用该位置将其指向您首选版本的来源目录。

    希望这会有所帮助。 -V

    【讨论】:

    • 我知道我可以使用 chatr 来调整那些禁用的线路,但不清楚问题是什么。
    【解决方案2】:

    我写了一个article 关于HP-UX 上的共享库,并试图使其清晰和全面。我发现自己不得不调试为什么程序找不到它们的库,所以我记录了它。

    会影响库搜索的三个主要位置是 1) /etc/SHLIBPATH; 2)环境变量;和 3) 嵌入式库搜索路径。

    不幸的是,这过于简单化了:我必须提供的最佳参考是那篇将所有内容结合在一起的文章(在我看来,无论如何)。

    【讨论】:

      【解决方案3】:

      没有链接器标志可以避免这种情况。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-02
        • 2017-06-30
        • 2020-09-07
        • 1970-01-01
        • 1970-01-01
        • 2012-07-25
        • 1970-01-01
        相关资源
        最近更新 更多