Mac High Sierra下安装Python版OpenCV遇CMake报错:不支持C++11
我来帮你一步步解决这两个头疼的问题——先搞定OpenCV编译时的C++11支持问题,再处理gcc安装的报错:
一、修复CMake强制启用C++11仍报错的问题
你用的CMake 3.10.2确实支持CMAKE_CXX_STANDARD变量,但在Mac的Xcode工具链环境下,光设置这一行可能不够,Xcode的构建规则有时候会覆盖你的配置。试试下面的方法:
先确保Xcode命令行工具是最新版
终端里跑这个命令,它会帮你安装/更新Xcode的命令行工具:xcode-select --install旧版本的命令行工具对C++11的支持可能有缺陷,更新后能解决很多底层问题。
修改CMakeLists.txt的正确姿势
别只加set(CMAKE_CXX_STANDARD 11),把这三行放在你的CMakeLists.txt最开头(project()命令之前):set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF)CMAKE_CXX_STANDARD_REQUIRED ON会强制CMake检查编译器是否支持C11,不支持就直接报错;CMAKE_CXX_EXTENSIONS OFF会禁用编译器的扩展语法,确保严格遵循C11标准。明确指定用Clang编译器(Mac原生适配)
Mac上默认的gcc其实是Clang的别名,直接指定Clang给CMake更稳妥,运行CMake时加上这些参数:cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ..Xcode自带的Clang对C++11的支持是完全没问题的,比手动折腾gcc适配性好得多。
二、解决gcc安装时./fixincludes: No such file or dir报错
如果你执意要装gcc来验证C++11支持,手动编译源码很容易遇到依赖缺失的问题,推荐用Homebrew一键安装:
安装Homebrew(如果还没装)
终端运行这条命令:/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"这是Homebrew官方的安装命令,直接在终端执行即可。
用Homebrew安装gcc
运行:brew install gccHomebrew会自动处理所有依赖和编译配置,安装后的gcc是完整可用的,不会出现
fixincludes缺失的问题。安装完成后,你可以用类似g++-13 --version(版本号根据你装的gcc版本调整)来验证,然后用下面的命令测试C++11支持:g++-13 -std=c++11 your_test_file.cpp -o test
三、偷懒建议:直接用pip装OpenCV(跳过编译)
其实如果你只是需要Python版本的OpenCV,完全没必要手动编译,直接用pip安装预编译好的版本就行:
pip install opencv-python # 要是需要额外的扩展模块,就装这个 pip install opencv-contrib-python
这样几分钟就能搞定,完全不用跟CMake和编译报错较劲。
内容的提问来源于stack exchange,提问作者Ghazal Sahebzamani

