11

我想将 libQtGui.so.4 libQtNetwork.so.4 和 libQtCore.so.4 包含在与我的应用程序所在的目录相同的目录中。我如何让 Qt 理解这一点?y 目的是拥有一个使用共享库的独立应用程序

4

3 回答 3

9

设置 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子目录在其位置,最后在任何系统定义的位置。

于 2010-03-23T04:35:17.457 回答
0

UNIX / Linux 将首先查看 LD_LIBRARY_PATH(如果设置),然后再查看系统标准库。因此,如果您设置它,您确实可以覆盖。就像在 Windows 上设置 PATH 一样。一样的效果。排序很重要。

您可以添加 ./ 或 . 到 LD_LIBRARY_PATH 也是如此。

export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
于 2010-03-23T02:33:03.783 回答
0

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().

于 2013-01-04T08:05:14.350 回答