【发布时间】: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