2013-02-07 66 views
2


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

+0

你解决了这个问题吗? –

+0

你可以明确地指定一个路径: LIBS + = -l $ {} OPENCV_HOME/lib目录/ opencv_core – edwinc

回答

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

这似乎并没有帮助抑制了-L/usr/lib目录系统的东西在LIBS = – fche

+0

这将是头可能使用LIBS =而不是LIBS + =? –

0

另一个破解是利用Makefile中的LIBS = $(SUBLIBS) ...部分qmake写道。 即调用生成的Makefile

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