3


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

4

3 回答 3

1

执行此操作有两个组件:

首先,您需要确保将它们正确包含在您的 .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 上的那个(以及其他)位置。

于 2013-02-07T20:05:10.563 回答
0

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

make SUBLIBS=-L/path/to/your/opencv
于 2014-09-09T21:59:02.983 回答
0

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

QMAKE_LIBDIR = /path/to/desired/opencvlib
于 2018-11-28T08:39:52.100 回答