0
私のUbuntu 14.04にはデフォルトでOpenCV 2.4.8がインストールされています。また、私はでビルドするcv::fisheye
クラスに必要な手作りOpenCV 2.4.11を持っています私の実行可能ファイル。問題は、私もROSを使用していることです。デフォルトは2.4.8ですが、2.4.11とリンクする必要があります。私は場所に持っているハックは以下のとおりです。このスクリプトは、異なるマシン上とOpenCVの3.0だけでなく、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のライブラリの少なくとも特定の最小バージョンをしたいので、それは次のように、find_package()関数でそれを述べる方が良いでしょう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
デフォルトで '2.4.8'を引っ張る' cv_bridge'モジュールがあります - –
'cv_bridgeモジュールは2.4.8をデフォルトで取り込みます.''私は' cv_bridge'モジュールがOpenCVを使っていることを理解しています見つけることができます。あなたのシステムに '2.4.8'バージョンがインストールされているので、モジュールはこのバージョンを使います。私は正しい?もしそうなら、 'OpenCV_DIR'変数(例えば、cmake:' cmake -DOpenCV_DIR = 'へのパラメータとして' 'cv_bridge'とあなたのモジュールの両方にOpenCV 2.4.11を強制するべきです)を設定してください。 –
Tsyvarev