2022-1-22更新(VScode 设置成功)
详情请见:
https://blog.youkuaiyun.com/qq_42067550/article/details/122634801
问题描述
安装好了 OpenCV
但是在 VScode 里面花了3天时间尝试设置,最后以失败告终,转用 Xcode 后一切顺利,没有任何报错。。。。。
报错代码:
Undefined symbols for architecture x86_64:
"__ZN2cv11namedWindowERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi", referenced from:
_main in cckR1lBO.o
"__ZN2cv6imreadERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi", referenced from:
_main in cckR1lBO.o
"__ZN2cv6imshowERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_11_InputArrayE", referenced from:
_main in cckR1lBO.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
网上查了很多,百度谷歌都试过了,没有找到一个有用的解决方案。
害得我以为是 OpenCV 安装出了问题,重装了 3 次,还把 VScode 也重装了好几次,无功而返。
从问题描述来看,一旦调用了 OpenCV 的函数,比如 imread,imshow 等就会出错,原因不明。
之前尝试过的方法罗列出来,避免遇到同样问题的人再踩坑:
- 在编译中添加
-std=c++11
- 使用
g++-11
- 设置 includePath 中的路径
安装 OpenCV
方法一:Homebrew
安装 homebrew,使用国内源速度很快!
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
依赖环境:
首先是 xcode
sudo xcode-select --install
然后是 pkg-config 用于精简编译(不确定在 xcode 环境下是否需要这个,vscode是需要的)
brew install pkg-config
使用 homebrew 安装
这里命令中不需要 opencv4,只要 opencv 即可
brew install opencv
速度很快也很快,而且各个文件夹路径设置的也很合理,建议 MAC 系统下还是使用 brew 安装比较好!
然后配置环境变量,前面一长串不重要,重要的是你看最后的结尾要对得上,因为有的安装完后会有软链接,比如/usr/local/opt/opencv/4.5.4/bin
这种形式
export PATH="/usr/local/opt/opencv@4/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/opencv@4/lib"
export CPPFLAGS="-I/usr/local/opt/opencv@4/include"
export PKG_CONFIG_PATH="/usr/local/opt/opencv@4/lib/pkgconfig"
方法二:源代码编译安装
下载地址:OpenCV 源代码
使用下载源代码编译安装,这种方式最后得到的路径和 brew 安装是有区别的,在 IDE 中设置的时候需要根据情况看(反正我试了是不一样的,不知道别人如何)
下载后进行解压到任意目录。
比如我的目录/users/jack/opencv-4.5.4
cd /users/jack/opencv-4.5.4
mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D OPENCV_GENERATE_PKGCONFIG=ON -D CMAKE_INSTALL_PREFIX=/usr/local ..
make # make -j2 可以加速
sudo make install
这里注意两点&