【问题标题】:How to set libs order in qmake?如何在 qmake 中设置库顺序?
【发布时间】:2013-02-07 10:11:41
【问题描述】:


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

【问题讨论】:

  • 这个问题你解决了吗?
  • 你可以明确指定一个路径:LIBS += -l${OPENCV_HOME}/lib/opencv_core

标签: linux linker g++ makefile qmake


【解决方案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 上的那个(以及其他)位置。

【讨论】:

  • 这似乎无助于抑制 LIBS= 头部的 -L/usr/lib 系统内容
  • 是否可以使用 LIBS = 而不是 LIBS+= ?
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    QMAKE_LIBDIR = /path/to/desired/opencvlib
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      • 2019-11-06
      • 2011-11-03
      • 2010-12-08
      • 1970-01-01
      • 2022-10-04
      • 1970-01-01
      相关资源
      最近更新 更多