0
我的Ubuntu 14.04默認安裝了OpenCV 2.4.8,而且我還有一個手工構建的OpenCV 2.4.11,我需要cv::fisheye
類,我使用cmake
構建這些類來生成我的執行文件問題是我使用ROS,它也默認爲2.4.8,但我需要鏈接到2.4.11。這個破解我在的地方是:強制cmake使用特定的OpenCV版本
find_package(OpenCV REQUIRED)
# Needed to force OpenCV 2.4 to link with 2.4.11
#message("Initial value for ${OpenCV_VERSION}: ${OpenCV_LIBS}")
if(OpenCV_VERSION VERSION_LESS "3.0")
set(OpenCV_VERSIONED_LIBS "")
macro(set_opencv_version version)
foreach(LIB_FILE ${ARGN})
set(OpenCV_VERSIONED_LIBS ${OpenCV_VERSIONED_LIBS} :lib${LIB_FILE}.so.${version})
endforeach()
endmacro()
set_opencv_version("2.4.11" ${OpenCV_LIBS})
else()
set(OpenCV_VERSIONED_LIBS ${OpenCV_LIBS})
endif()
#message("Updated value: ${OpenCV_VERSIONED_LIBS}")
target_link_libraries(my_fisheye_application
${OpenCV_VERSIONED_LIBS}
${catkin_LIBRARIES}
cv_bridge # This by default pulls in OpenCV 2.4.8 libraries
# ...etc...
)
由於這個腳本需要在不同的機器,並用OpenCV的3.0以及2.4.11工作,我真的不能做關於使用目錄中的任何假設。有一個更好的方法嗎?
'的問題是,我使用ROS,它也默認爲2.4.8,但我需要與2.4.11鏈接。「 - 請詳細說明這一點。如果你的軟件包中沒有其他東西直接間接地「find_package(OpenCV)」,你可以使用'find_package(OpenCV 2.4.11 REQUIRE)',所以它至少會找到* 2.4.11 *版本的OpenCV。如果還有其他OpenCV用戶,並且您可能不會影響其代碼,請按照[FindOpenCV.cmake](https://github.com/veter-team/cmake-modules)文檔部分中的描述設置「OpenCV_DIR」變量/blob/master/windows/FindOpenCV.cmake)模塊。 – Tsyvarev
默認情況下''cv_bridge'模塊拉入'2.4.8' - 讓我在。 –
上加上''cv_bridge模塊默認拉入2.4.8'我明白'cv_bridge'模塊使用OpenCV能夠找到。當您的系統上安裝了'2.4.8'版本時,模塊將採用此版本。我對嗎?如果是這樣,設置'OpenCV_DIR'變量(例如,作爲參數cmake:'cmake -DOpenCV_DIR ='應強制'cv_bridge'和你的模塊使用OpenCV 2.4.11。 –
Tsyvarev