最近在研究圖像識別相關代碼——OpenCV
,爲了便於調試,就要在Mac
上搭建一個調試c++
程序的調試環境。我這跑通了,分享給你們。php
Mac 自帶有C/C++環境,就再也不贅述。python
Xcode Command Line Tools
是必須的,可經過一下命令行觸發安裝程序,或者下載安裝。ios
sudo xcode-select --install
選擇下載文件注意這裏提示的版本號!
命令行安裝速度很慢,且失敗率很高,建議經過下載dmg
文件安裝
編譯OpenCV
時要用到cmake
。一樣能夠經過homebrew
或者下載安裝。
下載方式安裝的CMake,cmake可執行程序在/Applications/CMake.app/Contents/bin/cmake
.shell
若是你用的homebrew
方式安裝opencv
那麼CMake就不是必須的.
編譯引用有opencv
庫的c/c++
代碼須要附帶不少參數來告知include path,libs等,用pkg-config
就能精簡編譯參數。json
brew install pkg-config
有兩種方式安裝。segmentfault
## 一個命令安裝好opencv3 brew install opencv3
安裝好以後最好配置上這幾個環境變量。(通常命令行會提示你)xcode
export PATH="/usr/local/opt/opencv@3/bin:$PATH" export LDFLAGS="-L/usr/local/opt/opencv@3/lib" export CPPFLAGS="-I/usr/local/opt/opencv@3/include" export PKG_CONFIG_PATH="/usr/local/opt/opencv@3/lib/pkgconfig"
用homebrew安裝很方便,就是安裝時間很長(我用了一個大白天)。額外還會安裝python-opencv。
點擊下載源代碼。這裏我選擇的是Sources 3.4.5
bash
解壓後,進入目錄app
cd <opencv 解壓後目錄> mkdir release cd release cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local make sudo make install
這裏建立的release
目錄會放cmake
命令產生的成果。CMAKE_INSTALL_PREFIX
配置的目錄會存make命令產生的成果。
到這裏若是都沒報錯就算安裝成功了。
通常都不會出問題,在虛擬環境不必定能成功。
參考自 編譯安裝opencv
先寫一個只引用了標準庫的C++代碼試試看。
/// ./main.cpp #include <stdio.h> #include <iostream> int main(int argc, const char * argv[]) { std::cout << "Hello, World!\n"; return 0; }
結果以下。
沒問題就繼續嘗試在代碼引入OpenCV
庫。
安裝好後,配置一個環境變量就好了。
PKG_CONFIG_PATH="~/opencv解壓目錄/release/unix-install"
配置好以後在執行命令:
pkg-config opencv --libs --cflags opencv
顯示內容大體以下,這塊的內容就是opencv.pc
裏面的配置。
該環境變量就是爲了讓pkg-config
可以找到opencv.pc
這個文件。
好,重點來了,大部分人會卡在這裏
寫個OpenCV HellowWorld
來試試,打開一個空的VScode項目,建立
文件test.cpp
#include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #include <iostream> #include <stdlib.h> #include <stdio.h> using namespace std; using namespace cv; Mat src, dst, src_gray; char* window_name = "Demo"; /** * @主函數 */ int main( int argc, char** argv ) { /// 讀取一副圖片,不改變圖片自己的顏色類型(該讀取方式爲DOS運行模式) src = imread(argv[1], 1 ); /// 將圖片轉換成灰度圖片 cvtColor(src, src_gray, CV_RGB2GRAY); namedWindow(window_name, CV_WINDOW_AUTOSIZE); imshow(window_name, src_gray); while(true) { int c; c = waitKey(20); if (27 == (char) c) { break; } } }
進入到命令行環境
## 編譯測試程序 g++ `pkg-config opencv --libs --cflags opencv` ./test.cpp -o ./test.o ## 運行測試程序 ./test.o ~/Downloads/opencv-logo.png
pkg-config
這條命令是爲編譯opencv測試代碼引入類庫。
能看到以下運行結果,恭喜你成功了。
可參考該連接最後: 編譯自測程序
實際調試代碼不停編譯運行會敲不少命令,咱們嘗試把這些工做交給VScode。先爲VScode安裝一些插件
在根目錄下建立一個.vocode
文件夾,再建立三個文件。
.vscode/launch.json
.vscode/tasks.json
.vscode/c_cpp_properties.json
文件.vscode/tasks.json
{ "tasks": [ { "type": "shell", "label": "g++ build active file", "command": "/usr/bin/g++", "args": [ "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}.o", "`pkg-config", "--libs", "--cflags", "opencv`" ], "options": { "cwd": "/usr/bin" }, "group": { "kind": "build", "isDefault": true }, "problemMatcher": [] } ], "version": "2.0.0" }
文件.vscode/launch.json
{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "g++ build and debug active file", "type": "cppdbg", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}.o", "args": [ "~/Downloads/opencv-logo.png" ], "stopAtEntry": false, "cwd": "${fileDirname}", "environment": [ {"name": "PKG_CONFIG_PATH", "value": "opencv解壓目錄/release/unix-install"}, // 這是opencv解壓碼後建立的release目錄下的unix-install, 要保證該目錄下下有opencv.pc文件 {"name": "DYLD_LIBRARY_PATH", "value": "/usr/local/opencv/build/lib"} // 這個是你在編譯時,opencv make時`CMAKE_INSTALL_PREFIX`指定的目錄 // {"DYLD_LIBRARY_PATH": "/usr/local/opencv/build/lib"} // 這樣的配置是錯誤的! ], "externalConsole": true, // 這個開關打開表示,新開一個命令行窗口並運行程序。 "MIMode": "lldb", "preLaunchTask": "g++ build active file" // 這一行的內容要和上一個文件`.vscode/tasks.json`的`tasks`->`label`字段的內容要如出一轍! } ] }
文件.vscode/c_cpp_properties.json
{ "configurations": [ { "name": "Mac", "includePath": [ "/usr/local/include", "/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include", "/usr/local/opencv/include", // 這個是你在編譯時,opencv make時`CMAKE_INSTALL_PREFIX`指定的目錄 "${workspaceFolder}" ], "browse": { "limitSymbolsToIncludedHeaders": true, "databaseFilename": "", "path": [ "/usr/local/include", "/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include", "/usr/local/opencv/include", // 這個是你在編譯時,opencv make時`CMAKE_INSTALL_PREFIX`指定的目錄 "${workspaceFolder}" ] }, "intelliSenseMode": "clang-x64", "macFrameworkPath": [ "/System/Library/Frameworks", "/Library/Frameworks" ], "compilerPath": "/usr/bin/g++", "cStandard": "c11", "cppStandard": "c++17" } ], "version": 4 }
點擊VScode菜單欄Debug
> Start Debugging
運行結果以下:
爲了便於調試,我把launch.json
的externalConsole
設置爲true
,這樣會在vscode
以外新開一個終端運行程序,可能會彈框要受權,贊成便可。
Package opencv was not found in the pkg-config search path. Perhaps you should add the directory containing `opencv.pc' to the PKG_CONFIG_PATH environment variable No package 'opencv' found test.cpp:1:10: fatal error: 'opencv2/imgproc/imgproc.hpp' file not found #include "opencv2/imgproc/imgproc.hpp" ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 error generated. [Finished in 0.4s with exit code 1]
解決方案:
運行一下命令添加一條path
export PKG_CONFIG_PATH="/opencv解壓目錄/release/unix-install":"$PKG_CONFIG_PATH"
dyld: Library not loaded: @rpath/libopencv_dnn.3.4.dylib Referenced from: ~/App/test Reason: image not found bash: line 1: 18912 Abort trap: 6 ~/App/test [Finished in 1.0s with exit code 134]
解決方案:
if you want to solve error on terminal you can use export DYLD_LIBRARY_PATH=your/lib:$DYLD_LIBRARY_PATH if you want to solve error on Xcode in build page , go to "Runpath Search Paths" add you lib path
運行一下命令添加一條path
export DYLD_LIBRARY_PATH=/usr/include/opencv/build/lib:$DYLD_LIBRARY_PATH
遇到問題,歡迎留言
原文連接。不支持轉載!