老版本的ubuntu系统上使用最新的libtorch,存在许多坑,记录一下,大家遇到类型问题时,可以参考。
1 问题描述
使用cmake来编译基于libtorch编写的c++文件时,可能存在如下问题
1)ubuntu版本太低,不支持c++17标准。
解决方案升级c++编译器,这里我用的是VSCode,通过升级VSCode,解决了这个问题。
2)cmake版本太低,cmake时,报出不常见错误,如
Cannot specify link libraries for target "caffe2::mkl" which is not built by this project.
3)显示gcc版本太旧,无法生成pytorch的依赖,如
#error "You're trying to build PyTorch with a too old version of GCC. We need GCC 9 or later."
2 升级CMake
2.1 下载
官网下载二进制压缩包:Download CMake
2.2 解压
首先cd 到Downloads目录下,然后执行解压指令
cd Downloads
sudo tar -zxvf cmake-3.29.3-linux-x86_64.tar.gz
查看版本信息,验证是否安装好
cd cmake-3.29.3-linux-x86_64/bin
camke -version
或者
./cmake -version
2.3 建立软链接
在建立软链接时,可能存在cmake冲突,冲突时需要先移除原本的cmake链接。
移除
sudo rm -rf /usr/bin/cmake
建立
sudo ln -s /home/touch/Downloads/cmake-3.29.3-linux-x86_64/bin/cmake /usr/bin/cmake
验证
cmake -version
3 升级gcc/g++版本
参考链接:Ubuntu18.04升级gcc/g++版本 - 知乎
在低版本的ubuntu中官方不支持安装更高版本的gcc/g++,因此采用ppa源来进行安装。
3.1 添加源
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
更新源
sudo apt-get update
3.2 安装指定版本的gcc/g++-11
apt install gcc-11 g++-11 -y
查找当前的存在的版本
locate gcc | grep -E "/usr/bin/gcc-"
//如果locate不能用,使用ls查询/usr/bin/gcc*和g++*,这一步骤,在下一步会用到
更改默认gcc/g++-11指向
/这里的gcc-7是找到当前系统存在的版本,在auto模式下,1代表优先级,优先级数值越大优先级越高
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 1
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 1
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 10
查看gcc/g++版本
gcc --version
g++ --version