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