如何设置Qt应用程序找到Qt模块的位置?

时间:2010-03-23 02:28:26

标签: qt makefile dynamic-linking

我想将libQtGui.so.4 libQtNetwork.so.4和libQtCore.so.4包含在我的app所在的目录中。我怎么能让Qt理解这个?目的是拥有一个使用共享库的独立应用程序

3 个答案:

答案 0 :(得分: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子目录中,最后在任何系统定义的位置。

答案 1 :(得分:0)

在查看系统标准库之前,UNIX / Linux将首先查看LD_LIBRARY_PATH(如果已设置)。所以,如果你设置它,你确实可以覆盖。就像在Windows上设置PATH一样。同样的效果。订购很重要。

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

export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

答案 2 :(得分:0)

LD_LIBRARY_PATHQMAKE_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:当您make时,您可以看到为链接器提供了以下选项:-Wl,-rpath,/usr/local/Trolltech/Qt-4.8.5/lib/

注意3:为了确保二进制文件动态链接到正确的库,您可以在qVersion()传递的运行时显示Qt的版本。