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

C++ 为什么共享库可以作为一个用户定位,而不能作为另一个用户定位?,c++,linux,qt,shared-libraries,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 作为otherUser执行ldd,我们可以看到预期的结果: ~/MyApp/sr

我编译了一个需要作为另一个用户运行的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
作为
otherUser
执行
ldd
,我们可以看到预期的结果:

~/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_路径均为空:

~/MyApp/src $ echo $LD_LIBRARY_PATH

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

~/MyApp/src $

检查您的LD_LIBRARY_PATH环境变量

echo $LD_LIBRARY_PATH

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

检查您的LD\u library\u PATH环境变量

echo $LD_LIBRARY_PATH

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

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

/usr/local/Trolltech/Qt-4.8.5/lib/
otherUser
应该可以访问
usr
local
trolletech
Qt-4.8.5
lib


在我遇到此问题的具体案例中,
其他用户无法访问
Trolltech
目录

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

/usr/local/Trolltech/Qt-4.8.5/lib/
otherUser
应该可以访问
usr
local
trolletech
Qt-4.8.5
lib


在我遇到这个问题的具体案例中,
Trolltech
目录无法被
otherUser

访问共享库文件吗?用户之间的
LD_库路径
是否不同?从
~/Myapp/src
执行时,
/Myapp
,翻译成
~/MyApp/src/MyApp
?@DavidBrown,是的,我做了一个
chmod-R 777/usr/local/trolletech/Qt-4.8.5
@RobertHarvey,几乎a是大写的。因此,应用程序存在于~/MyApp/src/MyAppCan
其他用户
访问共享库文件?用户之间的
LD\u library\u路径
是否不同?当从
~/MyApp/src
执行时,
~/MyApp/src
转换为
~/MyApp/src/MyApp
?@DavidBrown,是的,我做了一个
chmod-R 777/usr/local/Trolltech/Qt-4.8.5
@RobertHarvey,几乎a是大写的。因此应用程序存在于~/MyApp/src/MyApp