25

Linux上で実行されているCMakeを使用してOpenCVベースのプロジェクトを構築しようとしています。これまでのところ、私のCMakeLists.txtファイルは次のようになっています

FIND_PACKAGE (OpenCV REQUIRED)
...
TARGET_LINK_LIBRARIES (my-executable ${OpenCV_LIBS})

ただし、これにより、動的にリンクされたライブラリが作成されます。静的ライブラリとリンクするにはどうすればよいですか?

4

7 に答える 7

11

BUILD_SHARED_LIBSCMakeでフラグをfalseに設定するだけで、静的OpenCVライブラリを構築できます。次に、これらの静的ライブラリを使用して独自のアプリケーションを構築するために必要なのは、CMakeLists.txt:にOpenCVへの依存関係を追加することだけです。

FIND_PACKAGE (OpenCV REQUIRED)
...
TARGET_LINK_LIBRARIES (your-application ${OpenCV_LIBS})

そしてCMakeがすべてを処理します。

于 2012-05-22T20:10:12.480 に答える
11

OpenCVConfig.cmake実際、この問題はOpenCVに付属しているですでに修正されているようです。あなたがしなければならないのはOpenCV_STATICあなたので定義することですCMakeLists.txt。つまり

set(OpenCV_STATIC ON)
find_package(OpenCV REQUIRED)
于 2014-11-13T23:40:22.157 に答える
6

すべてを静的にリンクするには、あなたが探していると思いますCMAKE_EXE_LINKER_FLAGS(追加-static)。

OpenCVConfig.cmakeの「単純なメソッド」を使用していますか?または古いFindOpenCV.cmake?

于 2010-09-20T21:37:12.417 に答える
5

CMake、より正確にはfind_libraryコマンドは共有ライブラリを優先し、共有ライブラリと静的ライブラリの両方が使用可能な場合はそれらを検索するため、少し注意が必要です。

バイナリを「可能な限り静的に」コンパイルできる優れたソリューションを自分で探していますが、エレガントなソリューションはまだ見つかりません。それが確実に機能する唯一の方法は、カスタムFindXXXXモジュールを介してすべてを実装することです。

于 2010-09-21T13:34:08.140 に答える
3

add_library行でstaticを指定します。https://cmake.org/cmake/help/latest/command/add_library.htmlを参照してください

静的ライブラリに対してリンクを探しているので、 CMAKE_FIND_LIBRARY_SUFFIXESプロパティを調べます。

于 2010-09-20T21:52:22.487 に答える
1

-staticオプションを渡すと、gccはリンクを拒否しますが、リンク引数に動的ライブラリがあります。これは、FindOpenCV.cmakeを使用するだけで、動的ライブラリを取得する場合に使用されます(OpenCVConfigの方法はわかりません)。 .cmakeは動作します)..。

于 2010-09-21T14:35:07.390 に答える
-1
SET (CMAKE_EXE_LINKER_FLAGS "-static")
于 2019-03-06T07:29:41.047 に答える