2014-09-13 70 views
1

我正在尝试制作我的源代码树的Qt5部分,所以我没有在我的机器上安装它,只是从源代码控制中复制它。我有一个问题,当我尝试运行uic.exe:uic无法找到共享库

[email protected]:~/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

您可以使用'export LD_LIBRARY_PATH = $ LD_LIBRARY_PATH:$ HOME/ct/LinuxLibs/Qt/bin'设置二进制文件搜索当前bin目录中的库 - 它只影响当前终端。你会更好地通过包管理器安装;或者如果编译将其手动安装到由链接器缓存 – Petesh 2014-09-13 15:01:53

+0

导出的其中一个标准位置,export LD_LIBRARY_PATH已修复它。感谢Petesh! – stiopa 2014-09-13 22:15:34

回答

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文件;例如

#!/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文件,从而使其能够运行。