系统:麒麟桌面版,arrch64架构
源g++版本:5.4.0,如下:
通过apt-get安装的g++版本最高就是5,用此版本编译我们的程序release模式可以编译,但debug模式就会报错(如下图),这边没有被这问题解决掉,于是尝试升级g++。
升级g++
首先,查看官网的文档
从中,我们可以得出以下关注点:
1
1.Before starting the build/install procedure please check the host/target specific installation notes在开始安装之前读说明,点击链接进去,找到对应的架构,再点击进去,如我的是aarch64,看起来没有什么需要特别注意的地方,如下图:
2
2.安装的过程分五步,分别是前提条件、下载源码、配置、构建、测试、完成安装,可以通过点击链接进去查看详细的内容
3.
3.下面我们逐步来操作
①在前提条件里介绍的是构建和修改GCC所需要的工具包,这里水平有限就展开介绍了,感兴趣的可以执行查看文档,这里奉上链接:构建和修改GCC所需要的工具包,点击即可跳转
②下载源码,这里是镜像地址,https://gcc.gnu.org/mirrors.html,点击即可跳转,看来一下没有国内的,懒得找国内源了
这边直接选了一个镜像进行下载,点击镜像链接→点击releases/→点击要下载的gcc版本(这里我简单选的是gcc-8.5.0),点击链接进去,即可看到源码包了,复制一下链接,然后在终端里面用wget下载即可,特别慢,建议空闲的时候下载(也可以找找国内源,这样速度要快点)
wget https://mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-8.5.0/gcc-8.5.0.tar.gz
③配置,这里选择默认配置,即configure不加其他参数,这里奉上配置选项参数的链接,感兴趣的自行查看。解压gcc的源码包,去到gcc目录下,执行configure,如下:
tar zvxf gcc-8.5.0.tar.gz
cd gcc-8.5.0/
./configure
执行configure的时候报错,如下图:
这里提示缺少GMP 4.2+,MPFR 2.4.0+ 和 MPC 0.8.0+(+号代表是以上版本,即更高的版本)
还给出了这些包的下载链接https://gcc.gnu.org/pub/gcc/infrastructure/,这边进去链接,可以看到GMP、MPFR和MPC的包,复制对应的链接,使用wget下载,如下:
wget https://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.2.1.tar.bz2
下载完毕,接下来就是解压并安装这三个包,顺序是GMP→MPFT→MPC
解压并安装的命令,注意tab.bz2包要用jxvf选项,tar.gz用zxvf选项,如下:
tar jxvf xxx.tar.bz2
tar zxvf xxx.tar.gz
cd src_dir
./configure
make
sudo make install
安装GMP、MPFT、MPC完毕之后,继续安装GCC,去到GCC的目录下,执行configure,结果还是报错了,默默地来了去去她丫的,错误信息如下:
未完待续,上个厕所先…
继续…
经检查,好像这边漏了make这一步骤(不太确定),执行make clean,然后再来一遍
make clean
./configure
make
sudo make install
执行make的时间会比较长,这个时候可以去干点别的事,等它自己跑完再执行sudo make install,如下:
make还是报错,错误信息如下:
找了一下这包libmpfr.so.6(注意区分链接文件和原文件),是有的。对于这情况,尝试将libmpfr.so.6.1.0分别拷贝到/usr/lib/和/usr/lib/aarch64-linux-gnu/并重命名为libmpfr.so.6
补充
对于编译时报错:g++: error: unrecognized command line option “-m64”
问题实则不在于g++的版本,而是在于-m64这选项。在Makefile去掉该选项,但请注意这里有个坑,这边是用NetBeans写的项目,然后编译配置文件在nbproject目录下,而Makefile在上一级目录,这边是在Makefile里找老半天都没找着-m64字样,实际上-m64选项是在NetBeans的编写配置文件Makefile-Debug.mk(Debug是配置名,模式是Debug),在CC Compiler Flags配置项,将CCFLAGS和CXXFLAGS的值-m64删除,编译即可通过,如下图:
另外,在NetBeans里点击编译还是会报错g++: error: unrecognized command line option “-m64”,需要将NetBeans里的Debug配置项C++编译器的基本选项→体系结构更改64位为默认即可。在NetBeans上重新编译,编译通过。附录:
我另外一台设备(ubuntu18.04)上gcc的编译选项,如下图: