2017-01-16 4 views
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... 
) 

として、私は実際に使用されているディレクトリを仮定できず。これを行うより良い方法はありますか?

+1

'問題は、私が使用していますことをされています。また

、あなたが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

+0

デフォルトで '2.4.8'を引っ張る' cv_bridge'モジュールがあります - –

+0

'cv_bridgeモジュールは2.4.8をデフォルトで取り込みます.''私は' cv_bridge'モジュールがOpenCVを使っていることを理解しています見つけることができます。あなたのシステムに '2.4.8'バージョンがインストールされているので、モジュールはこのバージョンを使います。私は正しい?もしそうなら、 'OpenCV_DIR'変数(例えば、cmake:' cmake -DOpenCV_DIR = 'へのパラメータとして' 'cv_bridge'とあなたのモジュールの両方にOpenCV 2.4.11を強制するべきです)を設定してください。 – Tsyvarev

答えて

3

CMake(FindOpenCVモジュール)がパッケージ/システムとは別のOpenCVライブラリを検索するようにしたい場合は、OpenCV_ROOT_DIR変数をOpenCVツリーのベースディレクトリに設定する必要があります。

find_package(OpenCV 2.4.11 REQUIRED) 
関連する問題