项目场景:
项目需要使用C++做深度学习,所以使用libtorch完成深度学习任务
问题描述
在执行训练时会遇到问题:munmap_chunk():invalid pointer
原因分析:
主要考虑环境问题:!!!GCC编译器版本太低
当前环境:
libtorch为1.2.0-cpu
C++版本:C++11
GCC:4.8.5
cmake:3.29.2
解决方案:
1、升级GCC编译器版本至GCC(G++) 4.9.2
升级GCC编译器版本步骤可参考:
步骤 1: 安装依赖项
首先,确保安装了所有必需的依赖项:
sudo yum install gcc gcc-c++ bzip2 bzip2-devel wget
步骤 2: 从源码编译安装 GCC 4.9.2
- 下载 GCC 4.9.2 的源码:
cd /usr/src
wget http://ftp.gnu.org/gnu/gcc/gcc-4.9.2/gcc-4.9.2.tar.gz
tar -xzvf gcc-4.9.2.tar.gz
- 编译并安装 GCC 4.9.2:
d gcc-4.9.2
./contrib/download_prerequisites
mkdir build && cd build
../configure --prefix=/opt/gcc-4.9.2 --enable-languages=c,c++ --disable-multilib
make -j$(nproc)
sudo make install
这个过程可能需要较长时间。
步骤 3: 使用 alternatives
切换 GCC 版本
- 设置
alternatives
:
对于已安装的每个版本,使用 alternatives
注册每个版本的 gcc
和 g++
:
sudo alternatives --install /usr/bin/gcc gcc /opt/gcc-4.9.2/bin/gcc 492
sudo alternatives --install /usr/bin/g++ g++ /opt/gcc-4.9.2/bin/g++ 492
这里的数字 492
是优先级,可以根据需要调整。
- 为 GCC 4.8.5 做同样的设置(如果已安装):
sudo alternatives --install /usr/bin/gcc gcc /usr/bin/gcc48 485
sudo alternatives --install /usr/bin/g++ g++ /usr/bin/g++48 485
步骤 4: 切换使用不同版本的 GCC
要在已安装的 GCC 版本之间切换,可以使用:
sudo alternatives --config gcc
sudo alternatives --config g++
这将提供一个选择界面,选择希望使用的 GCC和G++ 版本。
2、重新修改CMakeList文件
重新修改CMakeList文件可参考:
set(CMAKE_CXX_COMPILER "/opt/gcc-4.9.2/bin/g++")
set(CMAKE_CXX_STANDARD 11)
project(自己的项目名称)
(注意一定要先set,再project,
位置非常重要:set() 命令用于指定编译器必须在 project() 命令之前。一旦 project() 被调用,CMake 就会锁定使用的编译器。)
确保GCC和G++都换成了4.9.2