我想将 libQtGui.so.4 libQtNetwork.so.4 和 libQtCore.so.4 包含在与我的应用程序所在的目录相同的目录中。我如何让 Qt 理解这一点?y 目的是拥有一个使用共享库的独立应用程序
3 回答
设置 LD_LIBRARY_PATH 环境变量是一种选择。例如:
export LD_LIBRARY_PATH=/path/to/dir/with/libs:$LD_LIBRARY_PATH
另一种选择是在链接期间设置 Qt 应用程序的 RPATH。将 RPATH 设置为值“$ORIGIN”将导致动态链接器在运行时查看与 Qt 应用程序相同的目录。例如,如果使用 qmake,请将以下代码段添加到您的项目文件中:
unix:!mac{
QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN
QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/lib
QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/libs
QMAKE_RPATH=
}
这会将 RPATH 设置为“$ORIGIN:$ORIGIN/lib:$ORIGIN/libs”,这意味着动态链接器将首先查看 Qt 应用程序的位置,然后查看其位置的 lib 子目录,然后查看 libs子目录在其位置,最后在任何系统定义的位置。
UNIX / Linux 将首先查看 LD_LIBRARY_PATH(如果设置),然后再查看系统标准库。因此,如果您设置它,您确实可以覆盖。就像在 Windows 上设置 PATH 一样。一样的效果。排序很重要。
您可以添加 ./ 或 . 到 LD_LIBRARY_PATH 也是如此。
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
LD_LIBRARY_PATH
从来没有为QMAKE_RPATH
我工作过。相反,我QMAKE_RPATHDIR
在我的.pro
文件中设置。例如,在构建并安装 ( make install
) Qt 之后,它已被放置在/usr/local/Trolltech/Qt-4.8.5/lib/
. 然后我在我的.pro
文件中写下以下内容:
QMAKE_RPATHDIR += /usr/local/Trolltech/Qt-4.8.5/lib/
注 1:相对路径似乎不起作用。首选绝对路径。
注意 2:当您 then 时make
,您可以看到链接器提供了以下选项:-Wl,-rpath,/usr/local/Trolltech/Qt-4.8.5/lib/
注意 3:为确保二进制文件动态链接到正确的库,您可以在运行时显示由qVersion()
.