C++ 为什么共享库可以作为一个用户定位,而不能作为另一个用户定位?
我编译了一个需要作为另一个用户运行的Qt应用程序。但是,当作为该用户运行时,无法加载Qt共享库: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
~/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