【visual studio 2019 + cmake + opencv3】windows c++ 靜態編譯鏈接opencv3,生成可執行文件.exe,無需依賴環境運行

概述

  1. 準備工作
  2. 靜態編譯opencv3
  3. 在項目中使用opencv3靜態庫(不用.dll)
  4. 可能出現的問題

準備工作

安裝 visual studio 2019

在我的博文中有寫:安裝VS 2019
已安裝的可以跳過。

安裝cmake

在我的博文中有寫:安裝cmake

下載opencv

下載連接:opencv 下載
這裏我選擇的是opencv3.4.10,你也可以根據需要下載別的版本。
在這裏插入圖片描述
點windows,下載opencv安裝的可執行文件並運行,選擇一個文件夾extract就行。

cmake靜態編譯opencv3

打開cmake-gui
在這裏插入圖片描述

  1. 選擇opencv所在的源文件夾(就是你安裝的opencv在的那個位置,要具體到source文件夾)
  2. 選擇opencv要編譯到的目標文件夾
  3. 點擊“configure”,選擇你電腦安裝的visual studio版本,我選的是2019
    在這裏插入圖片描述
    標紅報錯python相關的沒有關係不用管,如果中斷了繼續點configure
  4. configure結束後會有很多標紅選項,這個時候有幾個選項要取消勾選:BUILD_SHARED_LIBS(編譯靜態庫),BUILD_JAVA(c++用不到java),BUILD_EXAMPLES,BUILD_TESTS,BUILD_PERF_TESTS
    在這裏插入圖片描述
    在這裏插入圖片描述
  5. 繼續點configure,標紅不管再點configure直到完成
  6. 點 generate

在VS 2019中調試opencv靜態庫

  1. 打開剛剛cmake編譯完的目標目錄,找到OpenCV.sln,打開(visual studio 2019)
    在這裏插入圖片描述
  2. 點擊debug和release都要調試一遍,切換的時候都要設置一次“配置管理器”,設置方法如下:
    在這裏插入圖片描述
    在這裏插入圖片描述
    點開配置管理器,在INSTALL上打勾
    在這裏插入圖片描述
    如果不需要python和java,可以把這個也一併取消勾選:
    在這裏插入圖片描述
    設置完成後關閉,點擊調試器開始調試。這一過程會花一段時間。
  3. 調試時出現於python相關的不用管。出現ALL_BUILD有什麼問題也不用管(除非你的解決方案不止一個項目,自行百度)
  4. 調試完成後,右鍵“解決方案”–>“重新生成解決方案”
    在這裏插入圖片描述
  5. 找到CMakeTargets中的INSTALL,右鍵選擇“僅限於項目”–>“僅生成INSTALL”
    在這裏插入圖片描述
  6. 結束後得到的文件夾有很多東西,主要看看裏面有沒有install文件夾,具體內容可以參考:
    在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述

在項目中靜態鏈接opencv3

清除動態鏈接的設置

把項目屬性裏面所有的動態鏈接設置全部清除掉,包括:

  1. “鏈接器”–>“常規”–>“附加庫目錄”
  2. “c/c++”–>“附加包含目錄”
  3. “l鏈接器”–>“輸入”–>“附加依賴項”裏的動態鏈接的.lib文件
    (比如opencv_world349.lib或者opencv_world349d.lib)

靜態鏈接設置

打開你用opencv寫的項目,右鍵項目名 –> “屬性”,配置如下:
1)“高級”–>“MFC的使用”–>"在靜態庫中使用 MFC"
在這裏插入圖片描述
2) “C/C++”–>“代碼生成”–>“運行庫”–>"多線程 (/MT)"
在這裏插入圖片描述
3) 在“VC++目錄”–>"包含目錄"中添加:

"XXX\install\include\"
"XXX\install\include\opencv"
"XXX\install\include\opencv2"

XXX就是你剛調試完opencv靜態庫那個文件夾
在這裏插入圖片描述
4)在"VC++目錄"–>“庫目錄” 添加路徑

XXX\install\x64\vc16\staticlib

在這裏插入圖片描述
5) “鏈接器”–>“輸入”–>"附加依賴項"
複製下面代碼到依賴項的最前面。
(其中349爲opencv版本號,你根據你自己的修改,其實就是“XXX/install/x64/vc16/staticlib/”裏的所有.lib文件)

IlmImf.lib;ttnotify.lib;libjasper.lib;libjpeg-turbo.lib;libpng.lib;libprotobuf.lib;libtiff.lib;libwebp.lib;opencv_calib3d349.lib;opencv_core349.lib;opencv_dnn349.lib;opencv_features2d349.lib;opencv_flann349.lib;opencv_highgui349.lib;opencv_imgcodecs349.lib;opencv_imgproc349.lib;opencv_ml349.lib;opencv_objdetect349.lib;opencv_photo349.lib;opencv_shape349.lib;opencv_stitching349.lib;opencv_superres349.lib;opencv_video349.lib;opencv_videoio349.lib;opencv_videostab349.lib;quirc.lib;zlib.lib;

在這裏插入圖片描述
ps:如果你要分release和debug來添加依賴項也可以,debug就是文件名裏末尾帶d的lib文件
6)調試即可
比如你配置的屬性是debug x64 ,調試時也要這樣

靜態鏈接編譯成功

編譯成功後,你寫代碼的項目文件夾的“/x64/debug(or release)/”下就能找到.exe文件,可以脫離環境運行~!
在這裏插入圖片描述
其實只需要兩個文件就可以運行!:
在這裏插入圖片描述

可能遇到的問題

提示沒有安裝MFC

打開visual studio 2019 installer–>“修改”–>“單個組件”–>選擇MFC相關的x86,x64組件–>修改安裝

顯示什麼.lib文件找不到

檢查附加依賴項裏的.lib文件:

  1. 有沒有書寫錯誤
  2. 有沒有漏加多加的(不要有什麼.cmake文件夾在裏面哈)
  3. 動態鏈接的.lib有沒有刪除
    檢查動態鏈接的其他配置有沒有刪乾淨。

歡迎提問討論~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章