我有一個使用libsctp.so庫的Linux應用程序。當我以root身份運行它時,它運行良好。無法爲非root用戶加載libsctp.so
但是當我運行它作爲一個普通用戶,它提供了以下錯誤:
error while loading shared libraries: libsctp.so.1: cannot open shared object file: No such file or directory
但是,當我做ldd的普通用戶,它能夠看到該庫:
[[email protected] src]$ ldd myapp
... ... libsctp.so.1 => /usr/local/lib/libsctp.so.1 (0x00d17000)
[[email protected] 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
[[email protected] src]$
什麼可能是錯誤的? ldd如何能夠找到libsctp.so,但是當實際運行應用程序時,它無法找到相同的庫?
編輯:只是觀察到,只有setuid位爲myapp設置此問題纔出現。
在您的應用上運行strace,看看會發生什麼。 libsctp.so.1是另一種符號鏈接嗎? – nos 2010-04-01 10:51:01
strace顯示下面的輸出:open(「/ usr/lib/libsctp.so.1」,O_RDONLY)= -1 ENOENT(沒有這樣的文件或目錄)。 另外,我發現了其他的東西:這個應用程序setuid位設置。即ls -l myapp:-rwsrwxr-x 1 root root 2260821 2010-04-01 17:55 myapp。如果我刪除該setuid位,那麼它能夠找到該庫。只有setuid位被設置,它才能找到庫。 – sankoz 2010-04-01 12:27:48