为什么共享库可以定位为一个用户,而不能定位为另一个用户
Why can shared libraries be located as one user, but not as another?
我编译了一个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
应该有权访问usr
、local
、Trolltech
、Qt-4.8.5
和lib
。
在我遇到此问题的特定情况下,otherUser
无法访问Trolltech
目录。
检查LD_LIBRARY_PATH环境变量。
echo $LD_LIBRARY_PATH
您可能会发现您的用户与其他用户的路径不同。您可能需要为找不到库的用户设置(或更新)此变量。
相关文章:
- C++如何通过用户输入删除列表元素
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何使用用户输入在C++中正确填充2D数组
- C++MySQL C api用户输入行
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 如何只允许用户输入正整数
- C++如何计算用户输入的数字中的偶数位数
- 通过for循环使用用户输入填充列表
- 这是我尝试让用户将值输入到数组中.然后将其隐藏为大量的星号
- 在C++中,我如何接受不同于同一行的用户输入
- 当用户超过按钮点击限制时报告
- Visual C++(VS2017)中用户定义的转换不明确
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 如果用户没有输入数据,我如何重新定位光标
- 为什么共享库可以定位为一个用户,而不能定位为另一个用户
- 编写一个接受用户输入并定位输入文件的C程序
- 在3D场景中定位物体,然后找出用户点击了什么