当前位置: 技术问答>linux和unix
动态链接库的路径配置问题
来源: 互联网 发布时间:2016-04-17
本文导语: 程序调用的本应该是/lib中的libxml2.so,但由于/etc/ld.so.conf中有一个也包含libxml.so的路径,所以我的程序每次调用的都是该路径下的动态库,而非/lib里的。(ldd命令查看的结果) 但/etc/ld.so.conf里的路径对别的程序还有用,...
程序调用的本应该是/lib中的libxml2.so,但由于/etc/ld.so.conf中有一个也包含libxml.so的路径,所以我的程序每次调用的都是该路径下的动态库,而非/lib里的。(ldd命令查看的结果)
但/etc/ld.so.conf里的路径对别的程序还有用,还不能删!
所以我的疑问是,如何指定/lib里的库而非其他?
但/etc/ld.so.conf里的路径对别的程序还有用,还不能删!
所以我的疑问是,如何指定/lib里的库而非其他?
|
前两天也遇到了 lib库问题..
我有一个a.csh
a.csh里调用了一个a.exe
a.exe加载了一个a.so
a.so存在两个路径下
/cmn/a.so(旧)
/lib/a.so(新)
最初是这样的 LD_LIBRARY_PATH=/cmn:/lib
我想调用/lib/a.so(新)的lib库,用 setenv LD_LIBRARY_PATH=/lib:${LD_LIBRARY_PATH}
echo ${LD_LIBRARY_PATH}
lib:/cmn:/lib
用ldd显示 ldd a.exe | grep -i a.so
/lib/a.so
但是我运行a.csh的时候调用到的还是/cmn/a.so(旧)
不知道为什么.....
后来没办法就写了一个.env文件(setenv LD_LIBRARY_PATH=/lib:${LD_LIBRARY_PATH}
),在.bashrc里加载了这个.env文件就能调用到/lib/a.so(新)
我有一个a.csh
a.csh里调用了一个a.exe
a.exe加载了一个a.so
a.so存在两个路径下
/cmn/a.so(旧)
/lib/a.so(新)
最初是这样的 LD_LIBRARY_PATH=/cmn:/lib
我想调用/lib/a.so(新)的lib库,用 setenv LD_LIBRARY_PATH=/lib:${LD_LIBRARY_PATH}
echo ${LD_LIBRARY_PATH}
lib:/cmn:/lib
用ldd显示 ldd a.exe | grep -i a.so
/lib/a.so
但是我运行a.csh的时候调用到的还是/cmn/a.so(旧)
不知道为什么.....
后来没办法就写了一个.env文件(setenv LD_LIBRARY_PATH=/lib:${LD_LIBRARY_PATH}
),在.bashrc里加载了这个.env文件就能调用到/lib/a.so(新)
|
法1:讲你的路径加在靠前位置 (try?)
法2: 用LD_PRELOAD指定你的库名字
#export LD_PRELOAD=/lib/libxml2.so
另外,你可以用 ldconfig -p | grep libxml2.so 看看 libxml2.so到底来自何处
GOOD LUCK!
法2: 用LD_PRELOAD指定你的库名字
#export LD_PRELOAD=/lib/libxml2.so
另外,你可以用 ldconfig -p | grep libxml2.so 看看 libxml2.so到底来自何处
GOOD LUCK!
|
两个文件名不一样,怎么会有影响??
|
你可以尝试将lib的路径加入到LD_LIBRARY_PATH中,这样具有更高的优先级。
|
法3:指定LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/lib;$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/lib;$LD_LIBRARY_PATH
|
又学到东西了,我也经常碰到这样的问题。