我正在尝试制作源代码树的Qt5部分,所以我没有在我的机器上安装它,只是从源代码控制中复制它。我尝试运行uic.exe时遇到问题:
stiopa@stiopa-VirtualBox:~/ct/LinuxLibs/Qt/bin > ./uic
./uic: error while loading shared libraries: libQt5Core.so.5: cannot open shared object file: No such file or directory
即使我将libQt5Core库复制到bin目录,我仍然会遇到相同的错误。 uic如何寻找共享库?我需要设置任何环境变量来修复它吗?
答案 0 :(得分:1)
这是另一种不将依赖共享库放在程序支持的定义位置的情况。
如果您计划“将文件复制到与可执行文件相同的目录”,快速解决方案是引用库加载路径中的目录;例如如果二进制文件在$HOME/foo
中,则执行:
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}$HOME/foo
这会增加或使$HOME/foo
运行时链接程序的加载路径。因此,您运行的任何程序都将在此目录中查找库,以及OS的默认设置(由ld.so
配置定义),以及应用程序本身中定义的路径( rpath
)。
如果你要遵循这条路线,你可以做的是将二进制文件移动到target.bin,创建一个目标bash脚本,它自动调用bin文件; e.g。
#!/bin/bash -p
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}$(dirname $0)
exec $0.bin "$*"
允许您更改二进制文件的搜索位置的辅助机制;不需要环境变量插入是修改二进制文件,以便它在不同的位置搜索,而不是通常的位置;这利用了运行时链接器中的一些功能(查找库)。
有一个名为chrpath的程序,可以由各种包管理器添加,允许您直接编辑rpath。在这种情况下;您可以使用以下命令更改二进制文件的其他搜索路径:
chrpath -r '$ORIGIN' foo
这意味着程序将与.so
文件的二进制文件位于同一目录中,从而允许它运行。