Ubuntu18.04编译MMMCore提示无法识别-std=c++2a参数如何解决
问题原因
你遇到的编译报错核心原因是:Ubuntu 18.04 默认自带的 GCC 7.5 版本不支持 C20 标准对应的编译标志 -std=c++2a,GCC 从 8.x 版本开始才加入对 C20(开发阶段代号为 c++2a)的支持。
另外你 cmake 输出里的 Could NOT find ALGLIB 警告如果不处理,后续编译也大概率会失败,可以提前安装对应依赖。
推荐解决方案(升级编译器,兼容性最好)
- 安装高版本GCC和ALGLIB依赖
sudo apt install gcc-9 g++-9 libalglib-dev
- 配置系统默认编译器指向GCC9
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 90
执行完成后可以运行以下命令验证版本是否切换成功:
gcc --version g++ --version
输出显示版本为9.x即为成功。
3. 清理之前的构建缓存,重新执行编译流程
cd ~/MMMCore/build rm -rf * cmake -DCMAKE_BUILD_TYPE=Release .. make
备选解决方案(修改编译配置,仅适用于项目未依赖C++20特性的场景)
如果不想升级编译器,可以直接修改项目根目录的CMakeLists.txt配置:
找到这行配置
add_definitions(-std=c++2a)
修改为
add_definitions(-std=c++17)
保存后清理构建缓存重新执行cmake和make命令即可。
内容的提问来源于stack exchange,提问作者Kong
相关产品推荐
相关产品推荐

