我编译了一个需要作为另一个用户运行的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 $
答案 0 :(得分:2)
otherUser
必须可以访问指向共享库的整个目录路径。检查路径中的所有文件夹:
/usr/local/Trolltech/Qt-4.8.5/lib/
otherUser
应该可以访问usr
,local
,Trolltech
,Qt-4.8.5
和lib
。
在我遇到此问题的特定情况下,Trolltech
无法访问otherUser
目录。
答案 1 :(得分:-1)
检查LD_LIBRARY_PATH环境变量。
echo $LD_LIBRARY_PATH
您可能会发现您的用户的路径与其他用户的路径不同。您可能需要为无法找到库的用户设置(或更新)此变量。