Centos7 编译C++项目错误解决 : terminate called after throwing an instance of ‘std::regex_error’
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:Centos7 编译C++项目错误解决 : terminate called after throwing an instance of ‘std::regex_error’
原文链接:https://www.stubbornhuang.com/1023/
发布于:2020年12月16日 14:27:45
修改于:2020年12月16日 14:54:00
1 问题原因
Centos7默认的gcc版本是4.8.3,虽然对C++11的一些新特性提供了支持,但是对C++11的正则表达式好像只写了头文件,没有提供具体的实现????!Wtf!
因为在cmake编译项目的时候整个项目可以正确的编译成功,但是一旦运行就会出现
terminate called after throwing an instance of 'std::regex_error'
导致程序崩溃。
1.1 确保编译器支持std::regex
如果你的编译器是GCC-4.9.0或者VS2013以下版本,请升级后,再使用。我之前使用的C++编译器,是GCC 4.8.3,有regex头文件,但是GCC很不厚道的没有实现,语法完全支持,但是库还没跟上,所以编译的时候是没有问题的,但是一运行就会直接抛出异常,非常完美的一个坑有木有!具体错误如下:
terminate called after throwing an instance of 'std::regex_error'
what(): regex_error
Aborted (core dumped)
如果你也遇到了这个问题,请不要先怀疑自己,GCC这一点是非常坑爹的!!!我在这个上面浪费了半天的时间才找了出来。所以在尝鲜C++的正则表达式之前,请升级你的编译器,确保你的编译器支持它
参考:https://zhuanlan.zhihu.com/p/47370556
2 解决方法
- 升级Gcc版本到4.9以上
- 将Cmake的gcc和g++编译器修改为新安装的gcc和g++版本
- 重新编译项目
3 Centos7升级gcc
3.1 安装centos-release-scl
sudo yum install centos-release-scl
3.2 安装devtoolset
注意,如果想安装7.版本的,就改成devtoolset-7-gcc,以此类推
sudo yum install devtoolset-8-gcc*
3.3 激活对应的devtoolset
激活对应的devtoolset,所以你可以一次安装多个版本的devtoolset,需要的时候用下面这条命令切换到对应的版本
scl enable devtoolset-8 bash
3.4 验证gcc版本
gcc -v
显示为 gcc version 8.3.1 20190311 (Red Hat 8.3.1-3) (GCC)
需要注意的是:这条激活命令只对本次会话有效,重启会话后还是会变回原来的4.8.5版本,要想随意切换可按如下操作
安装的devtoolset是位于 /opt/sh 目录之下,每个版本的目录下面都有个 enable 文件,如果需要启用某个版本,只需要执行
source ./enable
所以要想切换到某个版本,只需要执行:
source /opt/rh/devtoolset-8/enable
可以将对应版本的切换命令写个shell文件放在配了环境变量的目录下,需要时随时切换,或者开机自启。
3.5 新安装的gcc/g++路径
gcc:
/opt/rh/devtoolset-8/root/bin/gcc
g++:
/opt/rh/devtoolset-8/root/bin/g++
3.6 新建软链接替换旧的gcc
旧的gcc是运行的 /usr/bin/gcc,所以将该目录下的gcc/g++替换为刚安装的新版本gcc软连接,免得每次enable
mv /usr/bin/gcc /usr/bin/gcc-4.8.5
ln -s /opt/rh/devtoolset-8/root/bin/gcc /usr/bin/gcc
mv /usr/bin/g++ /usr/bin/g++-4.8.5
ln -s /opt/rh/devtoolset-8/root/bin/g++ /usr/bin/g++
gcc --version
g++ --version
4 Cmake指定编译器为新安装的gcc版本
将Cmake默认编译器修改为新安装的编译器,执行以下命令:
export CC=/opt/rh/devtoolset-8/root/bin/gcc
export CXX=/opt/rh/devtoolset-8/root/bin/g++
即可将Cmake的默认编译器修改为gcc 8.3.1,
重新使用:
cmake ..
编译项目,出现以下结果:
[root@localhost build]# cmake ..
-- The C compiler identification is GNU 8.3.1
-- The CXX compiler identification is GNU 8.3.1
-- Check for working C compiler: /opt/rh/devtoolset-8/root/bin/gcc
-- Check for working C compiler: /opt/rh/devtoolset-8/root/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /opt/rh/devtoolset-8/root/bin/g++
-- Check for working CXX compiler: /opt/rh/devtoolset-8/root/bin/g++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
发现目前Cmake正在使用gcc8.3.1编译项目。
在cmake之后重新使用make编译项目,发现不再出现:
terminate called after throwing an instance of 'std::regex_error'
错误,程序没有中断,并正确执行!Bingo!
5 参考链接
当前分类随机文章推荐
- C++ - std::map正向遍历与反向遍历的几种方式 阅读4498次,点赞3次
- C++ - C++实现Python numpy的矩阵维度转置算法,例如(N,H,W,C)转换为(N,C,H,W) 阅读4151次,点赞4次
- C++11 - 父类与子类相互包含的时候该如何正确的使用智能指针,防止循环引用 阅读2622次,点赞0次
- C++ - Windows获取电脑上摄像头设备数目、名字以及id 阅读460次,点赞0次
- C++ - 使用Websocket++编写客户端连接WebSocket服务器并进行通信 阅读4376次,点赞3次
- C++ - linux编译C++代码出现error: use of deleted function std::atomic
::atomic(const std::atomic 阅读2779次,点赞0次&) - C++11 - std::shared_ptr初始化的几种方式 阅读7139次,点赞2次
- C++ - 在两个互有依赖关系的类中使用std::shared_ptr和std::weak_ptr进行内存管理 阅读738次,点赞0次
- C++ - 格式化json字符串,方便展示json字符串的层次结构 阅读2977次,点赞0次
- C++ - Windows下字符串UTF8编码转ANSI,ANSI转UTF8编码 阅读505次,点赞0次
全站随机文章推荐
- 资源分享 - The History of Visual Magic in Computers - How Beautiful Images are Made in CAD, 3D, VR and AR 英文高清PDF下载 阅读1522次,点赞0次
- Python3爬虫 - requests的请求响应状态码(requests.status_code) 阅读9239次,点赞4次
- 深度学习 - 深度学习中的术语/专有名词归纳 阅读657次,点赞0次
- 资源分享 - Computational Geometry in C, Second Edition 英文高清PDF下载 阅读3141次,点赞1次
- 资源分享 - Game AI Pro 360 - Guide to Tactics and Strategy 英文高清PDF下载 阅读1837次,点赞0次
- WordPress - 在文章页顶部加入百分比阅读滚动进度条 阅读968次,点赞2次
- VTK读取序列的Dicom医学图片,用Marchingcube进行重建,并保存为obj文件 阅读5900次,点赞2次
- WordPress - 发送邮件很慢的解决办法 阅读655次,点赞1次
- 资源分享 - Vulkan Cookbook - Work through recipes to unlock the full potential of the next generation graphics API-Vulkan 英文高清PDF下载 阅读2338次,点赞0次
- 资源分享 - Mathematics for Computer Graphics , Fourth Edition 英文高清PDF下载 阅读1720次,点赞0次
评论
169