最近在研究图像识别相关代码——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
遇到问题,欢迎留言
原文连接。不支持转载!