HP-UX /usr/lib/dld.sl: Can't open shared library:解决办法

在HP-UX系统中遇到错误"/usr/lib/dld.sl: Can't open shared library",解决方案是设置环境变量SHLIB_PATH,指向所需库的路径,例如:/usr1/arbor/3pACE/ACE_wrappers/build/HPUX/ace等。通过使用chatr +s enable选项,允许程序利用SHLIB_PATH找到共享库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我在HP-UX上编译完一个程序的时候,ldd 这个binary的时候发现程序link的lib并不是按照我在环境变量中设置的SHLIB_PATH,而是取了其他值.这个很奇怪,感觉link 的lib被hardcode。

ldd $ARBORBIN/MRM
        /usr/lib/libdld.2 =>    /usr/lib/libdld.2
        /usr/lib/libc.2 =>      /usr/lib/libc.2
        /usr/lib/libdld.2 =>    /usr/lib/libdld.2
        /usr/lib/libxti.2 =>    /usr/lib/libxti.2
        /usr/lib/libc.2 =>      /usr/lib/libc.2
        /usr/lib/libm.2 =>      /usr/lib/libm.2
        /usr/lib/libcl.2 =>     /usr/lib/libcl.2
        /usr/lib/libisamstub.1 =>       /usr/lib/libisamstub.1
        /usr/lib/libdld.2 =>    /usr/lib/libdld.2
        /usr1/arbor/3p/oracle/HPUX/lib/libclntsh.sl.9.0 =>      /usr1/arbor/3p/oracle/HPUX/lib/libclntsh.sl.9.0
        /usr/lib/libcl.2 =>     /usr/lib/libcl.2
        /usr/lib/libc.2 =>      /usr/lib/libc.2
        /usr/lib/libm.2 =>      /usr/lib/libm.2
        /usr/lib/libdld.2 =>    /usr/lib/libdld.2
        /usr/lib/libnss_dns.1 =>        /usr/lib/libnss_dns.1
        /usr/lib/libdld.2 =>    /usr/lib/libdld.2
        /usr/lib/libpthread.1 =>        /usr/lib/libpthread.1
        /usr/lib/librt.2 =>     /usr/lib/librt.2
        /db/ora_mnt1/app/oracle/product/9.2.0.5_Client/lib32/libwtc9.sl =>      /usr1/arbor/3poracle/HPUX/lib/libwtc9.sl
        /usr/lib/libpthread.1 =>        /usr/lib/libpthread.1
        /usr1/arbor/src/lib/liboam_emit.sl =>   /usr1/arbor/src/lib/liboam_emit.sl
        /usr/lib/libstd_v2.2 => /usr/lib/libstd_v2.2
        /usr/lib/libCsup_v2.2 =>        /usr/lib/libCsup_v2.2
        /usr1/arbor/src/lib/libismutil.sl =>    /usr1/arbor/src/lib/libismutil.sl

env |grep SH

15:SHLIB_PATH=/usr1/arbor/3pACE/ACE_wrappers/build/HPUX/ace:/usr1/arbor/3p/rosette/HPUX/rel/lib/

:/opt/app/oracle/product/9.2.0.5/lib32:/usr1/arbor/idesign_site/lib:/usr1/arbor/3pxml/xerces/HPUX/lib:/app/arborperl/5.8.2/lib.....



这样子的话,当程序放到客户的环境上是,客户那根本没有/usr1/arbor/3p/oracle/HPUX/lib这个目录,肯定就是找不到这个文件了.


于是在客户的环境上,出现了以下问题:
celcom@milhpit1@CELTCUS:/home/tss/celcom/celcom_tss/yyang 35 : ./MRM
/usr/lib/dld.sl: Can't open shared library: /usr1/arbor/3p/oracle/HPUX/lib/libclntsh.sl.9.0
/usr/lib/dld.sl: No such file or directory
Abort (core dumped)

celcom@milhpit1@CELTCUS:/home/tss/celcom/celcom_tss/yyang 54 : ldd  MRM
        /usr/lib/libdld.2 =>    /usr/lib/libdld.2
        /usr/lib/libc.2 =>      /usr/lib/libc.2
        /usr/lib/libdld.2 =>    /usr/lib/libdld.2
        /usr/lib/libxti.2 =>    /usr/lib/libxti.2
        /usr/lib/libc.2 =>      /usr/lib/libc.2
        /usr/lib/libm.2 =>      /usr/lib/libm.2
        /usr/lib/libcl.2 =>     /usr/lib/libcl.2
        /usr/lib/libisamstub.1 =>       /usr/lib/libisamstub.1
        /usr/lib/libdld.2 =>    /usr/lib/libdld.2
/usr/lib/dld.sl: Can't open shared library: /usr1/arbor/3p/oracle/HPUX/lib/libclntsh.sl.9.0
/usr/lib/dld.sl: No such file or directory

最后找到一个workaround方法,就是不用改程序,只是用chatr +s enable MRM
celcom@milhpit1@CELTCUS:/home/tss/celcom/celcom_tss/yyang 61 : chatr +s enable MRM
MRM:
   current values:
         normal executable
         shared library dynamic path search:
             SHLIB_PATH     disabled  second
             embedded path  disabled  first  Not Defined
         shared library list:
             dynamic   /usr1/arbor/src/lib/libismutil.sl
             dynamic   /usr/lib/libCsup_v2.2
             dynamic   /usr/lib/libstd_v2.2
             dynamic   /usr1/arbor/src/lib/liboam_emit.sl
             dynamic   /usr/lib/libpthread.1
             dynamic   /usr1/arbor/3p/oracle/HPUX/lib/libclntsh.sl.9.0
             dynamic   /usr/lib/libcl.2
             dynamic   /usr/lib/libm.2
             dynamic   /usr/lib/libc.2
             dynamic   /usr/lib/libxti.2
             static    /usr/lib/libdld.2
         shared library binding:
             deferred
         global hash table disabled
         plabel caching disabled
         global hash array size:1103
         global hash array nbuckets:3
         shared vtable support disabled
         explicit unloading enabled
         static branch prediction disabled
         executable from stack: D (default)
         kernel assisted branch prediction enabled
         lazy swap allocation disabled
         text segment locking disabled
         data segment locking disabled
         third quadrant private data space disabled
         fourth quadrant private data space disabled
         third quadrant global data space disabled
         data page size: D (default)
         instruction page size: D (default)
         nulptr references disabled
         shared library private mapping disabled
         shared library text merging disabled
   new values:
         normal executable
         shared library dynamic path search:
             SHLIB_PATH     enabled   second
             embedded path  disabled  first  Not Defined
         shared library list:
             dynamic   /usr1/arbor/src/lib/libismutil.sl
             dynamic   /usr/lib/libCsup_v2.2
             dynamic   /usr/lib/libstd_v2.2
             dynamic   /usr1/arbor/src/lib/liboam_emit.sl
             dynamic   /usr/lib/libpthread.1
             dynamic   /usr1/arbor/3p/oracle/HPUX/lib/libclntsh.sl.9.0
             dynamic   /usr/lib/libcl.2
             dynamic   /usr/lib/libm.2
             dynamic   /usr/lib/libc.2
             dynamic   /usr/lib/libxti.2
             static    /usr/lib/libdld.2
         shared library binding:
             deferred
         global hash table disabled
         plabel caching disabled
         global hash array size:1103
         global hash array nbuckets:3
         shared vtable support disabled
         explicit unloading enabled
         static branch prediction disabled
         executable from stack: D (default)
         kernel assisted branch prediction enabled
         lazy swap allocation disabled
         text segment locking disabled
         data segment locking disabled
         third quadrant private data space disabled
         fourth quadrant private data space disabled
         third quadrant global data space disabled
         data page size: D (default)
         instruction page size: D (default)
         nulptr references disabled
         shared library private mapping disabled
         shared library text merging disabled


我们ldd看一下:
celcom@milhpit1@CELTCUS:/home/tss/celcom/celcom_tss/yyang 62 : ldd MRM                /usr/lib/libdld.2 =>    /usr/lib/libdld.2
        /usr/lib/libc.2 =>      /lib/libc.2
        /usr/lib/libdld.2 =>    /lib/libdld.2
        /usr/lib/libxti.2 =>    /lib/libxti.2
        /usr/lib/libc.2 =>      /lib/libc.2
        /usr/lib/libm.2 =>      /lib/libm.2
        /usr/lib/libcl.2 =>     /lib/libcl.2
        /usr/lib/libisamstub.1 =>       /lib/libisamstub.1
        /usr/lib/libdld.2 =>    /lib/libdld.2
        /usr1/arbor/3p/oracle/HPUX/lib/libclntsh.sl.9.0 =>      /opt/app/oracle/product/9.2.0.5/lib32/libclntsh.sl.9.0
        /usr/lib/libcl.2 =>     /lib/libcl.2
        /usr/lib/libc.2 =>      /lib/libc.2
        /usr/lib/libm.2 =>      /lib/libm.2
        /usr/lib/libdld.2 =>    /lib/libdld.2
        /usr/lib/libnss_dns.1 =>        /lib/libnss_dns.1
        /usr/lib/libdld.2 =>    /lib/libdld.2
        /usr/lib/libpthread.1 =>        /lib/libpthread.1
        /usr/lib/librt.2 =>     /lib/librt.2
        /opt/app/oracle/product/9.2.0.5/lib32/libwtc9.sl =>     /opt/app/oracle/product/9.2.0.5/lib32/libwtc9.sl
        /usr/lib/libpthread.1 =>        /lib/libpthread.1
        /usr1/arbor/src/lib/liboam_emit.sl =>   /home/tss/celcom/celcom_tss/site_specific/lib/liboam_emit.sl
        /usr/lib/libstd_v2.2 => /lib/libstd_v2.2
        /usr/lib/libCsup_v2.2 =>        /lib/libCsup_v2.2

        /usr1/arbor/src/lib/libismutil.sl =>    /home/tss/celcom/celcom_tss/site_specific/lib/libismutil.sl


in summary :The chatr +s enable option allows a program to utilize SHLIB_PATH to locate shared libraries. 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值