如何在qmake中设置libs顺序?

时间:2013-02-07 10:11:41

标签: linux linker g++ makefile qmake


我们在使用qmake在Ubuntu Linux上构建C ++软件时遇到了问题。
问题是:我们使用一些库,例如OpenCV,它可以在一个系统中具有不同的版本。
qmake自动将-L / usr / lib或-L / usr / lib / x86_64-linux-gnu添加到g ++参数,以及之后的LIBS变量的内容。
因此,与OpenCV的不同版本存在冲突,使用了系统版本,但我们需要自定义版本,位于构建树中。 是否有任何方法可以在-L或其他方面更改libs顺序来解决这个问题?

3 个答案:

答案 0 :(得分:0)

这样做有两个组成部分:

首先,您需要确保将它们正确地包含在.pro文件中。这样做(这是我当前的项目):

LIBS +=      L${OPENCV_HOME}/lib \
            -lopencv_core \
            -lopencv_highgui \

您可以使用您的路径替换环境变量。我发现使用这样的环境变量很方便,因为你还需要标题包括:

INCLUDEPATH += $$(OPENCV_HOME)/include/opencv2 \
               $$(OPENCV_HOME)/include/opencv \
               $$(OPENCV_HOME)/include

这允许您创建项目并正确构建它们。

但是,当您尝试运行它们时,由于您的应用程序找到了错误的库(从您说的系统库),您可能会遇到各种问题 - 您需要正确设置LD_LIBRARY_PATH变量。在这种情况下,我有一个启动脚本(您可以在您的用户配置文件或其他地方执行此操作),其中包含:

export LD_LIBRARY_PATH=${OPENCV_HOME}/lib

然后在系统库之前首先查看LD_LIBRARY_PATH上的那个(以及其他)位置。

答案 1 :(得分:0)

另一个黑客是利用Makefile qmake写入的LIBS = $(SUBLIBS) ...部分。 即,使用

调用生成的Makefile
make SUBLIBS=-L/path/to/your/opencv

答案 2 :(得分:0)

我遇到了与通过将QMAKE_LIBDIR设置到构建树的lib目录来解决的相同问题。 QMake会在该值之后自动添加系统库路径,从而可以正确检测所需的库:

QMAKE_LIBDIR = /path/to/desired/opencvlib