2013-02-07 106 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