无法为非root用户加载libsctp.so

我有一个使用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的:/家庭/梅德#