2016-08-26 9 views
3

共有オブジェクトをcmakeの自分のコードにリンクするにはどうしたらいいですか?
私はOpenCVをリンクしたいと思っています。私はlibopencv _ ***。so.3.1なんかを自分のソフトウェアパッケージに入れています。cmakeの共有オブジェクトをリンクするには?

その場合、次のような行がこの質問の答えと考えています。

... 
find_package(OpenCV 3.1) 
include_directories(${OpenCV_INCLUDE_DIRS}) 
link_directories(${OpenCV_LIBRARY_DIRS}) 
... 
target_link_libraries(my_node ${OpenCV_LIBRARIES}) 

しかし、ここにこの問題があります。 私は以前に/ usr/includeと/ usr/lib/x86_64-linux-gnuの下にOpenCV 2.4.8をインストールしましたが、今はOpenCV 3.1.0をローカルディレクトリ "〜/ Libs/opencv"コードから。 コードをコンパイルするとき、OpenCV 2.4.8が優先され、使用されます。

この場合、CMakeLists.txtをどのように記述する必要がありますか?
現在、私は以下のように書いています。

... 
set(CMAKE_PREFIX_PATH ${HOME}/Libs/opencv) 
include(${HOME}/Libs/opencv/share/OpenCV/OpenCVConfig.cmake) 
find_package(OpenCV 3.1) 
set(OpenCV_INCLUDE_DIRS ${HOME}/Libs/opencv/include) 
include_directories(${OpenCV_INCLUDE_DIRS) 
set(OpenCV_LIBRARY_DIRS ${HOME}/Libs/opencv/lib) 
link_directories(${OpenCV_LIBRARY_DIRS}) 
... 

上記のCMakeLists.txtの種類が私を助けました。
実行可能ファイルがlibopencv _ ***。so.3.1と同じディレクトリにコピーされた場合、上記のCMakeLists.txtが機能します。
"make"が失敗します。 しかし、私はそれを実行可能ファイルを含むディレクトリ上で独立させたいと思います。

この問題はどうすればよいですか? ありがとうございます。

+0

4時間以内にアップアップしましたか? – usr1234567

+0

BEFOREとAFTERを使用してライブラリの順序を調整する必要があります。 – usr1234567

+0

これを見てください:https://cmake.org/Wiki/CMake_RPATH_handlingそれは助けることができました – Amadeus

答えて

1

find_libraryのcmakeの文書を参照してください。 いくつかの定義済みのパスは、libを検索するために使用されます。 (プラットフォームに依存)。オプションでこれを無効にすることは可能です。 お試しください find_package(OpenCV 3.1 PATHS ~/Libs/opencv NO_DEFAULT_PATH NO_SYSTEM_ENVIRONMENT_PATH)

+0

コメントありがとうございます!実際にはこれでは十分ではありませんでしたが、上記のように問題を解決できました。 – Pythoner