2017-06-03 87 views
1

前段時間我安裝了OpenCV 2.4.12,大約2天前安裝了OpenCV 3.2。在我完成安裝程序(this是我所遵循的指南)後,我的舊openCV代碼會一直告訴我在編譯它時找不到cv函數。顯然是一個鏈接器錯誤。後來我意識到我應該使用2.4版本,所以我刪除了我的主目錄中的opencv-3.2.0文件夾,並再次在我的2.4.12文件夾中運行sudo make install。這似乎工作,但再次無法找到簡歷功能。OpenCV重裝問題

所以這是我自己到目前爲止發現的。

我在CMakeLists.txt中打印了一些變量,而我的OpenCV_INCLUDE_DIRS指向/ usr/include/opencv/usr/include,這顯然是問題所在。但是現在我該如何解決它?我試圖手動設置該變量使用此線

集($ {OpenCV_INCLUDE_DIRS}的/ usr /包括/ OpenCV的/)

但同樣,也沒有用。

這裏是我的CMakeLists.txt:

cmake_minimum_required(VERSION 2.8) 
project(DisplayImage) 
find_package(OpenCV REQUIRED) 
set(${OpenCV_INCLUDE_DIRS} /usr/include/opencv/) 
include_directories(${OpenCV_INCLUDE_DIRS}) 
MESSAGE(STATUS "CMAKE_ROOT: " ${OpenCV_INCLUDE_DIRS}) 
add_executable(DisplayImage DisplayImage.cpp) 
SET(OpenCV_LIBS opencv_core opencv_highgui opencv_imgproc) 
target_link_libraries(DisplayImage ${OpenCV_LIBS}) 
MESSAGE(STATUS "CMAKE_ROOT: " ${OpenCV_LIBS}) 

這裏是我使用的CMake的配置。

cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -DFORCE_VTK=ON -DWITH_TBB=ON -DWITH_V4L=ON -DWITH_QT=ON -DWITH_OPENGL=ON -DWITH_CUBLAS=ON -DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" -DWITH_GDAL=ON -DWITH_XINE=ON -DBUILD_EXAMPLES=ON .. 

最後,這裏是我的配置file

編輯:另外,如果我跑 的gcc -o analyze_video.cpp objDetection -lopencv_core -lopencv_imgproc -lopencv_objdetect -lopencv_highgui

然後一切正常。所以我建立了庫,但是我的CMake配置出了問題。

回答

0

OpenCV_INCLUDE_DIRS是一個列表。在CMake中,message(${OpenCV_INCLUDE_DIRS})將打印每個列表元素,其間沒有任何分隔符。此外,OpenCV_INCLUDE_DIRS是標題的路徑,而不是庫。當定義一個函數(即找到頭文件)但符號不存在時(即沒有鏈接所需的函數庫),會發生鏈接錯誤。

請通過更新您的問題來澄清您的問題,以包括項目中CMakeLists.txt文件的內容,用於OpenCV構建的CMake配置標誌,或者提供GitHub Gist等鏈接(如果它太大)。您提供的信息越多,可以幫助您的人越快。

+0

@CraigScott,感謝您的編輯。 –

+0

啊哈,我以爲雙重安裝已經添加了包含路徑,因此包含路徑變得無效。我可能會在哪個文件夾中找到二進制文件?爲什麼INCLUDE_DIRS變量會指向包含目錄的基礎? – Tri

+0

@Tri,讓我爲您提供一種使用OpenCV構建最小程序的方法: OpenCV build: 'cmake -DCMAKE_BUILD_TYPE = RELEASE .. && make -j4 && sudo make install'。 App的CMakeLists只有兩行包含OpenCV:'find_package(OpenCV REQUIRED)''target_link_libraries($ {CMAKE_PROJECT_NAME} $ {OpenCV_LIBS})'。 並且不需要FindOpenCV.cmake或其他東西。 我想如果你能自己重現它。這是我的工作腳本,如果我想建立某些OpenCV模塊:goo.gl/p1snyO。但要小心,檢查需要啓用哪些模塊。 –