make编译时fatal error: codecvt: No such file or directory解决方法

在Ubuntu系统中编译openmvs时遇到'fatal error: codecvt: No such file or directory'的问题。通过研究发现,codecvt是C++标准库的一部分,用于字符串编码转换。尝试添加'-std=c++11'编译选项未解决问题,因为我的gcc版本是4.8.5,不完全支持C++11。解决方案是升级到gcc 5以上版本,确保对C++11的支持。经过卸载旧版本gcc,安装gcc 6,并验证版本后,重新编译成功,错误得以解决。

在安装openmvs,使用如下命令生成生成 OpenMVS 库文件

sudo make -j2 && sudo make install

编译报错,信息如下

fatal error: codecvt: No such file or directory

查阅codecvt资料后发现,codecvt为c++标准库头文件(示例代码),其起到封装字符串的转换,包括宽和多字节,从一种编码到另一种的作用。
最初从一些帖子上看到,codecvt库只有C++11标准及以上才支持,需要在编译时gcc后添上“-std=c++11”,或在makefile文件中修改,添加命令使gcc默认支持C++11标准,试验后发现不行。
然后看到老外的一篇帖子,有一个回答见下图,大意是只有gcc 5以上的版本才能完全支持C++11标准,我看了下我的gcc版本是4.8.5版本,因此尝试卸载升级gcc。在这里插入图片描述参考理清gcc、libc、libstdc++的关系大概了解了gcc,g++与 libstdc++的关系。
参考gcc 5.4 默认不支持c++11,可知gcc支持C++11,但默认不支持。所以要在编译时加上-std=c++11 或者 -std=c++0x才可以,因此选择升级gcc6。
安装gcc 6前需要先将原来的gcc 4.8.5,g++ 4.8.5 以及关联的库卸载,卸载方法见 ubuntu 重新安装gcc。卸载gcc有的帖子说可能出现误删显卡驱动、系统崩溃的情况,需要小心注意。

卸载旧的版本:

  sudo apt-get remove gcc

  sudo apt-get remove g++

安装gcc 6见Ubuntu16.0.04 安装g++6,代码如下

sudo apt-get update && \
sudo apt-get install build-essential software-properties-common -y && \
sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y && \
sudo apt-get update && \
sudo apt-get install gcc-snapshot -y && \
sudo apt-get update && \
sudo apt-get install gcc-6 g++-6 -y && \
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-6

安装完成后,查看gcc, g++版本是否正确

gcc --version
g++ --version

再次make编译生成库,不再提示“fatal error: codecvt: No such file or directory"信息,成功解决报错问题。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值