我有一个使用libsctp.so库的Linux应用程序。 当我运行它作为根,它运行良好。
但是,当我作为一个普通的用户运行它,它会给出以下错误:
加载共享库时出错:libsctp.so.1:无法打开共享目标文件:没有这样的文件或目录
但是,当我以普通用户的身份执行ldd时,可以看到这个库:
[sanjeev @ devtest6 src] $ ldd myapp
... ... libsctp.so.1 => /usr/local/lib/libsctp.so.1 (0x00d17000)
[sanjeev @ devtest6 src] $ ls -lL /usr/local/lib/libsctp.so.1
-rwxrwxrwx 1 root root 27430 2009-06-29 11:26 /usr/local/lib/libsctp.so.1
[sanjeev @ devtest6 src] $
什么可能是错的? ldd如何能够findlibsctp.so,但实际运行应用程序时,却无法find相同的库?
编辑:只是观察到,只有setuid位为myapp设置此问题出现。
这可能是因为环境设置的差异。
您可能需要将/usr/local/lib/
到LIBRARY_PATH或类型。
解决了这个问题。 我在/etc/ld.so.conf.d中添加了一个名为followng的新文件:
libsctp.so.1.conf
libsctp.so.1.conf的内容如下:
在/ usr / local / lib目录/
然后跑了
/ sbin目录/ LDCONFIG
之后,我的应用程序成功运行。
说明:由于setuid位已设置,程序以root用户身份执行,LD_LIBRARY_PATH不可用。 因此它无法找到libsctp.so。 我没有意识到这一点,因为当我以root身份登录时,.bashrc被执行,LD_LIBRARY_PATH变为可用。
如果libsctp.so
本身依赖的共享库没有找到(是的,这有点令人困惑),那么你可以收到这个错误。 在图书馆本身上试试ldd
:
ldd /usr/local/lib/libsctp.so.1
你是否在切换到root用户之前设置了LD_LIBRARY_PATH
? 当你以root身份运行ldd
,它仍然可以找到所有依赖库?
dmitry @ debian:〜$ echo $ LD_LIBRARY_PATH dmitry @ debian:〜$ export LD_LIBRARY_PATH = / usr / local / lib dmitry @ debian:〜$ echo $ LD_LIBRARY_PATH 在/ usr / local / lib目录 德米特里@ debian:〜$ su 密码: debian:/ home / dmitry#echo $ LD_LIBRARY_PATH Debian的:/家庭/梅德#