为什么共享库可以作为一个用户而不是另一个用户?

时间:2013-07-11 21:39:29

标签: c++ linux qt shared-libraries

我编译了一个需要作为另一个用户运行的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 $

2 个答案:

答案 0 :(得分:2)

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

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

otherUser应该可以访问usrlocalTrolltechQt-4.8.5lib

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

答案 1 :(得分:-1)

检查LD_LIBRARY_PATH环境变量。

echo $LD_LIBRARY_PATH

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