如何在qmake中设置libs顺序?

问题描述 投票:2回答:3

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

linux linker g++ makefile qmake
3个回答
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上的那个(以及其他)位置。


0
投票

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

make SUBLIBS=-L/path/to/your/opencv

0
投票

通过将QMAKE_LIBDIR设置为构建树的lib目录,我遇到了同样的问题。 QMake自动在此值之后添加系统库路径,从而允许正确检测所需的库:

QMAKE_LIBDIR = /path/to/desired/opencvlib
© www.soinside.com 2019 - 2024. All rights reserved.