Windows11+Opencv+Clion コンパイルソースコード
参考:https://www.robotsfan.com/posts/69395e08.html
予防
- コンパイル プロセスで使用されるソフトウェア、オープン ソース コードなどのすべてのツールのインストール パスには、漢字やスペースが含まれていてはなりません。
- cmake プロセスによっていくつかのファイルがダウンロードされますが、ローカル エリア ネットワークの場合はダウンロードできない場合がありますので、事前にダウンロードして該当するディレクトリにコピーしておくとよいでしょう。
- OpenCV はデフォルトで多くの関数をコンパイルしますが、一部の関数は最初に依存関係パッケージをインストールする必要があります。コンパイルに必要な OpenCV 関数のみを選択できるため、時間を大幅に節約できます。
OpenCVソースコードのダウンロード
OpenCV ソースアドレス: https://github.com/opencv/opencv.git
ここで使用されているタグは 4.8.0 です
Cmake のインストール (cmake-3.25.3-windows-x86_64):
mingw のインストール (C/C++ コンパイラ):
- MinGW の x86_64-posix-seh MinGW バージョンをダウンロードする必要があることに注意してください。そうしないと、後のコンパイルでエラーが発生します。
- ダウンロード アドレス: https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/8.1.0/threads-posix/seh/
- x86_64: 64 ビット
- posix : C++11/C11 マルチスレッド機能を有効にします。libgcc を libwinpthreads に依存させると、pthreads API が直接呼び出されなくても winpthreads DLL が配布されます。アプリケーションにもう 1 つの DLL を割り当てることに問題はありません。
- win32 : C++11 マルチスレッド機能はありません。
- sjlj、seh、および dwarf はすべて例外処理モデルです。sjlj と seh は 64 ビット処理モデルで、sjlj は C 標準ライブラリに含まれるもので、seh は 2014 年に新しく発明されたもので、seh の方が新しく、パフォーマンスが優れています。dwarf と sjlj は、32 ビットの 2 つの例外処理モデルです。同様に、dwarf のパフォーマンスは sjlj よりも優れていますが、64 ビットをサポートしていません。
- そこで、x86_64-posix-seh をダウンロードすることにしました。
- 環境変数を構成し、以下をシステム変数 PATH に追加します
D:\software\mingw64\bin
。パスには漢字やスペースを含めないでください。
opencv メイクファイルを生成する
-
開ける
cmake-gui
-
Browse Source
opencv の下のソースフォルダーをクリックして選択します -
Browse Build
opencv の下の mingw_build フォルダーをクリックして選択します -
クリックし
Configure
てコンパイラを指定します
-
ダウンロードしたばかりの posix バージョン MinGW-W64 の下で、
gcc
とをそれぞれ選択します。g++
-
クリックし
Finish
て完了を待ちます
問題が発生した場合は、次のファイルを開いてください
- ログ内のダウンロード アドレスに従ってこれら 3 つのファイルをダウンロードし、/source/.cache/ffmpeg に配置し、
certutil -hashfile 文件名 MD5
各ファイルの MD5を使用してMD5-文件名
3 つのファイルの名前を変更します。
- cmake-gui に戻り、もう一度クリックし、
Configure
他にエラーがない場合はGenerate
[Generate Makefile]をクリックします。
コンパイル
-
コマンドラインを開いて
mingw-build
フォルダーに入り、mingw32-make -j8
コンパイルを使用します (8 はコアの数です。ご自身で調整してください)。コンパイル速度は約 10 分です。 -
コンパイルが成功したら、
mingw32-make install
コマンドを使用してコンパイルされたファイルをopencv/mingw_build/install
ディレクトリに統合します。
環境変数を構成する
環境変数を構成します。opencv/mingw_build/install/x64/mingw/bin
環境変数のパスに追加されます。
clion プロジェクトで opencv を使用する
新しいプロジェクト、編集CMakeLists.txt
cmake_minimum_required(VERSION 3.22)
project(my_cv)
set(CMAKE_CXX_STANDARD 17)
add_executable(my_cv main.cpp)
# 设置OpenCV目录
set(OpenCV_DIR D:/Users/opencv48/opencv/mybuild/install)
# 搜索OpenCV目录
find_package(OpenCV REQUIRED)
# 链接OpenCV库文件
target_link_libraries(my_cv ${OpenCV_LIBS})
編集main.cpp
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat img = imread("D:/workspace/cpp_workspace/my-cv/data/img/lena.jpg");
namedWindow("test", WINDOW_AUTOSIZE);
imshow("test", img);
waitKey();
return 0;
}
注:
cmake バージョン:
C:\Users\zishi>cmake -version
cmake version 3.25.3
CMake suite maintained and supported by Kitware (kitware.com/cmake).
g++ バージョン:
C:\Users\zishi>g++ --version
g++ (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 8.1.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.