运行SPECCpu 2017提示'unrecognized option '-mabi=lp64'
问题现象描述
环境配置:
类别 |
子项 |
版本 |
---|---|---|
硬件 |
CPU |
鲲鹏920处理器 |
网络 |
Ethernet-GE |
|
存储 |
SATA 4TB |
|
内存 |
- |
|
操作系统 |
CentOS |
7.6.0 |
Kernel |
- |
|
软件 |
SPECCpu |
2017 |
问题描述:
在CentOS 7.6上运行SPECCpu 2017的测试命令./runcpu -c ../config/Example-gcc-linux-aarch64.cfg intrate时,提示“'unrecognized option '-mabi=lp64'”。
关键过程、根本原因分析
从上述截图中看不到具体原因,查看文件benchspec/CPU/999.specrand_ir/build/build_base_mytest-64.0000/make.out中的信息,发现有错误打印gcc: error: unrecognized command line option '-mabi=lp64',经确认GCC是系统自带的GCC 4.8.5,该GCC版本不支持-mabi=lp64编译选项,需要升级GCC版本。
结论、解决方案及效果
需要升级GCC版本,推荐升级到GCC 7.3.0。
升级GCC
- 下载GCC 7.3.0版本软件包。
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz --no-check-certificate
- 解压源码包。
tar -xf gcc-7.3.0.tar.gz
- 配置。
cd gcc-7.3.0
./contrib/download_prerequisites
上述命令会下载依赖包“gmp-6.1.0.tar.bz2”、“isl-0.16.1.tar.bz2”、“mpc-1.0.3.tar.gz”或“mpfr-3.1.4.tar.bz2”,如果某依赖包下载失败,可根据需要执行相应的命令下载,然后重新执行./contrib/download_prerequisites命令配置。
wget https://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 --no-check-certificate wget https://gcc.gnu.org/pub/gcc/infrastructure/isl-0.16.1.tar.bz2 --no-check-certificate wget https://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz --no-check-certificate wget https://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 --no-check-certificate
- 创建gcc-7.3.0_build目录,配置GCC。
mkdir gcc-7.3.0_build cd gcc-7.3.0_build ../configure --prefix=/usr/local/gcc-7.3.0 --mandir=/usr/share/man --infodir=/usr/share/info --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,fortran,lto --enable-plugin --enable-initfini-array --disable-libgcj
- 编译安装GCC。
make -j 96 make -j96 install
- 配置环境变量。
- 打开profile文件。
vi /etc/profile
- 增加如下配置。
PATH=/usr/local/gcc-7.3.0/bin:$PATH
- 使配置生效。
source /etc/profile
- 打开profile文件。
- 将libstdc++.so.6添加到uar/lib64目录下。
rm -rf /lib64/libstdc++.so.6 cp /usr/local/gcc-7.3.0/lib64/libstdc++.so.6.0.24 /usr/lib64
- 制作软连接。
cd /usr/lib64 ln -s libstdc++.so.6.0.24 libstdc++.so.6
- 在/etc/ld.so.conf文件中增加如下内容。
/usr/local/gcc-7.3.0/lib64
- 使配置生效。
ldconfig
GCC/G++/C++全局增加-fsigned-char编译选项
增加-fsigned-char编译选项是因为在ARM和x86架构上针对char类型理解有差异,x86架构上默认识别char是无符号类型,ARM架构上默认识别是有符号类型,所以需要增加编译选项。
同步把/bin目录下gcc/g++/c++也修改为如下。
- 查看GCC安装目录。
[root@localhost target]# which gcc /usr/local/gcc-7.3.0/bin/gcc
- 备份原来的gcc文件。
mv /usr/local/gcc-7.3.0/bin/gcc /usr/local/gcc-7.3.0/bin/gcc-arm
- 新建gcc文件。
vi /usr/local/gcc-7.3.0/bin/gcc
- 输入如下内容保存。
#!/bin/sh gcc-arm -fsigned-char "$@"
- 修改gcc文件权限。
chmod 755 /usr/local/gcc-7.3.0/bin/gcc
- 验证GCC版本。
gcc -v

同样的步骤修改g++和c++。由于环境变量中优先取“/usr/local/gcc-7.3.0/bin”目录,实际/bin/gcc、/bin/c++、/bin/g++脚本中重定向到“/usr/local/gcc-7.3.0/bin”下的文件。
cd /bin mv gcc gcc-arm mv g++ g++-arm mv c++ c++-arm cp /usr/local/gcc-7.3.0/bin/gcc ./ cp /usr/local/gcc-7.3.0/bin/g++ ./ cp /usr/local/gcc-7.3.0/bin/c++ ./