現在人工智能大熱,如果想了解人工智能或者自詡為專家,那不得不學習OpenCV。OpenCV 是一個基于BSD許可(開源)發行的跨平臺計算機視覺庫,可實現人工智能領域內很多核心的圖像處理和計算機視覺方面的通用算法。值得自豪的是,目前全球OpenCV開發總部已經遷移到中國,里面也凝聚了不少國人的心血。
在Linux下安裝opencv是一件很簡單的事情,本以為在win10下也不復雜,結果還是碰到了一些坑,這跟微軟的生態不無關系。先是下載免費的Visual Studio 2015 社區版,占用十幾G的空間,結果還是浪費了不少時間才通過編譯opencv,這是后話暫且不提。本文只是講講得如何在Win10下面,利用MINGW編譯通過opencv-4.2.0版本。
MINGW是Windows下面的一個類Linux編譯器,按照官網介紹,就是“MinGW,是Minimalist GNUfor Windows的縮寫。它是一個可自由使用和自由發布的Windows特定頭文件和使用GNU工具集導入庫的集合,允許你在GNU/Linux和Windows平臺生成本地的Windows程序而不需要第三方C運行時(C Runtime)庫。”而且簡單易操作。
先做些準備工作,這個步驟挺重要,否則會走很多彎路:
1.下載最新版的CMAKE,安裝好后運行命令看版本:
在Windows系統上使用CMake和MinGW進行編譯有時候會遇到一些挑戰,特別是在正確配置編譯器和工具鏈的時候。你的問題表明CMake嘗試使用Visual Studio的MSVC編譯器,而不是你期望的MinGW編譯器。這是一個常見問題,因為CMake有時會默認選擇安裝在系統上的第一個編譯器,而不是你想要使用的編譯器。
下面是一個詳細的指南,幫助你正確地設置CMake和MinGW在Windows上的編譯環境,并解決你所遇到的問題。
完整的步驟指南
步驟1:確認MinGW的安裝
首先,確保你已經正確安裝了MinGW并且將其路徑添加到了系統環境變量PATH中。這可以通過以下步驟完成:
檢查MinGW安裝目錄:確保你已經安裝MinGW,并且確認其bin目錄的路徑。通常情況下,安裝路徑可能是C:\mingw64\bin。
更新系統環境變量:
打開 控制面板 -> 系統和安全 -> 系統 -> 高級系統設置。
點擊 環境變量。
在 系統變量 中找到 Path,然后點擊 編輯。
檢查是否已經存在類似 C:\mingw64\bin 的條目。如果沒有,點擊 新建,然后輸入你的MinGW安裝路徑。
驗證安裝:
打開一個新的命令提示符窗口,并輸入以下命令來驗證MinGW的安裝是否正確:
gcc --version
g++ --version
mingw32-make --version
1
2
3
你應該看到相應的版本信息,而不是“命令未找到”之類的錯誤。
步驟2:下載并配置CMake
確保你的CMake版本最新,至少是3.10以上的版本。你可以從CMake官網下載最新版本。
安裝CMake:
雙擊下載的安裝程序進行安裝。安裝時選擇添加到系統環境變量中,以便你可以在命令行中直接使用cmake命令。
驗證CMake安裝:
在命令提示符中輸入以下命令來驗證CMake的安裝:
cmake --version
1
這應該會輸出CMake的版本信息。
步驟3:使用CMake和MinGW進行編譯
現在你已經安裝并配置好了MinGW和CMake,可以使用它們來編譯你的OpenCV項目。
編譯步驟
打開終端并導航到項目目錄:
打開命令提示符(或PowerShell),導航到OpenCV項目的根目錄下。例如:
cd D:\opencv
1
創建構建目錄:
為你的項目創建一個單獨的構建目錄,這樣可以保持源碼目錄的清潔。創建構建目錄并進入它:
mkdir build
cd build
1
2
運行CMake生成Makefiles:
在這個步驟中,我們需要指定CMake使用MinGW作為編譯器,而不是Visual Studio的編譯器。你可以通過指定CMAKE_C_COMPILER和CMAKE_CXX_COMPILER來強制使用MinGW編譯器:
cmake -G "MinGW Makefiles" -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ ..
1
這里的..表示你的CMakeLists.txt文件在構建目錄的上一級目錄中。
注意:
CMAKE_C_COMPILER=gcc:明確指定使用MinGW的GCC作為C編譯器。
CMAKE_CXX_COMPILER=g++:明確指定使用MinGW的G++作為C++編譯器。
編譯項目:
使用mingw32-make來編譯項目:
mingw32-make
1
如果一切順利,mingw32-make將會編譯你的項目,并在當前目錄生成相應的可執行文件。
運行可執行文件:
在構建目錄中找到并運行生成的可執行文件:
./MyExecutable.exe
1
這應該會運行你的OpenCV項目或者其他CMake項目。
解決問題
如果你在上述過程中遇到錯誤,這里是一些常見的問題及其解決方案:
問題1:CMake未檢測到正確的編譯器
錯誤信息:
-- The CXX compiler identification is MSVC 19.40.33811.0
1
解決方案:
這意味著CMake在默認情況下找到了MSVC編譯器而不是MinGW編譯器。請確保在CMake命令中明確指定CMAKE_C_COMPILER和CMAKE_CXX_COMPILER選項。
cmake -G "MinGW Makefiles" -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ ..
1
此外,檢查你的PATH變量,確保gcc和g++在路徑中,并且在MSVC之前。如果沒有,請調整PATH變量的順序。
問題2:找不到Makefile
錯誤信息:
mingw32-make: *** No targets specified and no makefile found. Stop.
1
解決方案:
這表明CMake未能生成Makefile,可能是因為配置階段失敗。確保以下幾點:
cmake命令是否正確,特別是生成器是否指定為"MinGW Makefiles"。
查看CMake輸出日志,尋找配置失敗的具體原因。
確認在運行cmake命令時,當前目錄是正確的構建目錄,并且CMakeLists.txt在正確的位置。
問題3:鏈接器錯誤或編譯器錯誤
如果在編譯過程中出現鏈接器錯誤或編譯器錯誤,通常是由于未正確找到庫或頭文件。
解決方案:
確保所有依賴庫的路徑都已經包含在CMake的配置中。
檢查CMakeLists.txt中是否正確設置了include_directories()和link_directories()。
如果是OpenCV庫的問題,確認你已經安裝并配置了OpenCV的路徑。
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
target_link_libraries(MyExecutable ${OpenCV_LIBS})
1
2
3
其他建議
檢查日志文件:
CMake會在構建目錄中生成CMakeFiles文件夾,里面包含配置和生成過程的詳細日志。如果遇到問題,可以查看CMakeOutput.log和CMakeError.log來找出具體問題。
使用CMake GUI:
對于初學者來說,CMake GUI工具可以更方便地管理項目配置。你可以通過CMake GUI設置MinGW為默認生成器,并選擇具體的選項進行配置。
更新工具鏈:
如果使用較舊版本的工具鏈或CMake,可能會遇到兼容性問題。確保你的CMake和MinGW版本都是最新的。
通過以上步驟和解決方案,你應該能夠在Windows系統上使用CMake和MinGW順利編譯你的項目。如果還有其他問題,歡迎隨時詢問。