我想将libQtGui.so.4 libQtNetwork.so.4和libQtCore.so.4包含在我的app所在的目录中。我怎么能让Qt理解这个?目的是拥有一个使用共享库的独立应用程序
答案 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_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:当您make
时,您可以看到为链接器提供了以下选项:-Wl,-rpath,/usr/local/Trolltech/Qt-4.8.5/lib/
注意3:为了确保二进制文件动态链接到正确的库,您可以在qVersion()
传递的运行时显示Qt的版本。