执行atc转换或模型训练时,报错:fatal error: 'cstdint' file not found
问题描述
在Ubuntu 22.04上执行atc转换命令或者在CentOS 7.6上进行模型训练时,报错:fatal error: 'cstdint' file not found。
图1 报错截图

可能原因一
Ubuntu 22.04环境上安装了gcc的多个版本,CCEC时,会寻找默认安装路径下高版本的gcc和包含gcc的其他工具(如devtoolset-9-gcc),但gcc高版本安装时缺失了文件,导致找不到cstdint头文件。
示例定位思路如下:
- 执行命令查看环境上gcc情况。
1 2
cd /usr/lib/gcc/aarch64-linux-gnu ll
查询结果如下图所示,存在gcc11和gcc12两个安装目录。
- 执行命令查询环境上的gcc版本。
1
dpkg -l | grep gcc
查询结果如下所示,存在gcc 11和gcc 12两个版本。
或者通过运行一个简单的c程序,使用CCEC编译,执行如下示例命令查看使用的gcc版本:
ccec -o test ./test.cc -v
查询结果如下所示,当前使用的是gcc 12版本。
- 检查各版本下是否包含头文件,发现仅gcc 11版本下存在头文件,路径如下所示。
1
/usr/include/c++/11/cstdint
解决措施
执行如下命令,卸载环境上的gcc 12,使用已安装的gcc 11进行编译。
1
|
apt remove gcc-12 libgcc-12-dev |
可能原因二
CentOS 7.6系统的默认gcc版本为4.8.5,即使用户已安装了更高版本的gcc 7.3.0,但CCEC编译时找到了默认安装gcc 4.8.5的cstdint头文件,导致出现兼容性问题。
解决措施
执行模型训练前,配置如下环境变量(aarch64和x86_64配置相同),编译时使用符合版本要求的gcc 7.3.0头文件,都配置如下环境变量,以下配置以安装路径“/usr/local/Ascend/”、gcc 7.3.0版本为例,请根据软件包实际安装路径和gcc版本进行修改。
export C_INCLUDE_PATH=/usr/local/Ascend/ascend-toolkit/latest/toolkit/toolchain/hcc/aarch64-target-linux-gnu/include/c++/7.3.0/:/usr/local/Ascend/ascend-toolkit/latest/toolkit/toolchain/hcc/aarch64-target-linux-gnu/include/c++/7.3.0/aarch64-target-linux-gnu/ export CPLUS_INCLUDE_PATH=/usr/local/Ascend/ascend-toolkit/latest/toolkit/toolchain/hcc/aarch64-target-linux-gnu/include/c++/7.3.0/:/usr/local/Ascend/ascend-toolkit/latest/toolkit/toolchain/hcc/aarch64-target-linux-gnu/include/c++/7.3.0/aarch64-target-linux-gnu/
父主题: 附录C:安装故障处理