为什么共享库可以定位为一个用户,而不能定位为另一个用户

Why can shared libraries be located as one user, but not as another?

本文关键字:用户 定位 一个 另一个 不能 共享 为什么      更新时间:2023-10-16

我编译了一个Qt应用程序,需要作为另一个用户运行。然而,当它以用户身份运行时,它无法加载Qt共享库:

~/MyApp/src $ sudo -u otherUser ./MyApp
./MyApp: error while loading shared libraries: libQtGui.so.4: cannot open shared object file: No such file or directory

ldd作为otherUser,我们可以看到预期的:

~/MyApp/src $ sudo -u otherUser ldd ./MyApp
libQtGui.so.4 => not found

然而,当我自己做ldd时,我可以发现libQtGui.so.4共享库很好。

~/MyApp/src $ ldd ./MyApp
libQtGui.so.4 => /usr/local/Trolltech/Qt-4.8.5/lib/libQtGui.so.4 (0x00002b97a4e1a000)
libQtNetwork.so.4 => /usr/local/Trolltech/Qt-4.8.5/lib/libQtNetwork.so.4 (0x00002b97a5bf1000)

为什么otherUser找不到共享库?要使MyApp可由otherUser执行,我需要做些什么?

对于两个用户,我的LD_LIBRARY_PATH似乎都为空:

~/MyApp/src $ echo $LD_LIBRARY_PATH
~/MyApp/src $ sudo -u otherUser echo $LD_LIBRARY_PATH
~/MyApp/src $

通向共享库的整个目录路径必须可由otherUser访问。检查路径中的所有文件夹:

/usr/local/Trolltech/Qt-4.8.5/lib/

otherUser应该有权访问usrlocalTrolltechQt-4.8.5lib

在我遇到此问题的特定情况下,otherUser无法访问Trolltech目录。

检查LD_LIBRARY_PATH环境变量。

echo $LD_LIBRARY_PATH

您可能会发现您的用户与其他用户的路径不同。您可能需要为找不到库的用户设置(或更新)此变量。