在安装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"信息,成功解决报错问题。

在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,并验证版本后,重新编译成功,错误得以解决。





