ubuntu16.04安装gcc-6.3问题记录

文章目录

    • 安装gcc-6.3
    • libmpfr.so.6: cannot open shared object file: No such file or directory
    • Python.h: 没有那个文件或目录 #include "Python.h"

ubuntu默认有安装gcc,可以通过gcc --version看到,但是项目中以前使用的gcc-6.3,网上有说用sudo apt-get install gcc-6安装的,但是是安装gcc-6.5。所以只能通过源码安装

安装gcc-6.3

转载自:Ubuntu16.04下编译安装gcc6.3.0
尊重原创,请看原文

1.环境要求
安装gcc之前要安装gmp,mpfr,mpc,isl这几个库,并且要卸载旧的gcc,然而我们需要在最后安装gcc之前再卸载旧的gcc,因为安装必需的库时需要旧的gcc。

2.安装gmp
去官网下载最新的包,之后直接解压到想要安装的位置。安装步骤如下

$ cd gmp-6.1.2/
$ mkdir build
$ cd build/
$ ../configure -prefix=/usr/local/gmp-6.1.2
$ make -j12
$ sudo make install

我们把gmp安装在了/usr/local目录下,使用参数-j12是可以调用多线程加速编译的过程。

3.安装mpfr
同样是在官网下载最新的包,而后解压,安装步骤类似上一步。

$ cd mpfr-4.0.1/
$ mkdir build
$ cd build/
$ ../configure --prefix=/usr/local/mpfr-4.0.1 --with-gmp=/usr/local/gmp-6.1.2
$ make -j12
$ sudo make install

因为用到了上一步安装的gmp,因此mpfr的安装需放在gmp之后。

4.安装mpc
步骤依旧同上,源码在官网。

$ cd mpc-1.1.0/
$ mkdir build
$ cd build/
$ ../configure -prefix=/usr/local/mpc-1.1.0 -with-gmp=/usr/local/gmp-6.1.2 -with-mpfr=/usr/local/mpfr-4.0.1
$ make -j12
$ sudo make install

同时用到了gmp和mpfr。

5.安装isl(这个我没有安)

6.安装gcc6.3
这里不要卸载旧版gcc,因为再生成makefile的时候还需要,只需要安装完gcc-6.3,在最后改gcc的链接就是。
终于到了我们的目标,gcc6.3,首先我们需要卸载旧的gcc
$ sudo update-alternatives --remove-all gcc
这一步会将gcc和g++相关卸载。

接下来我们需要在环境变量里配置一下刚刚安装的几个库。

$ gedit ~/.bashrc

然后在最后加一行

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc-1.1.0/lib:/usr/local/gmp-6.1.2/lib:/usr/local/mpfr-4.0.1/lib:/usr/local/isl-0.18/lib:/usr/local/lib:/usr/lib/x86_64-linux-gnu

如果不进行上面一步的话,可能会出现如下的错误

checking for suffix of object files... configure: error: in '/home/manu/gcc/gcc/i686-pc-linux-gnu/libgcc':
configure: error: cannot compute suffix of object files: cannot compile
See 'config.log' for more details.

一般缺少库都会产生这样的错误,我们需要打开config.log进行具体查看。之前没有安装isl库的时候就会在log文件中显示出来,而终端并没有显示具体的error。

接下来就是编译安装gcc6.3,源码在官网的镜像里可以找到,随便选一个ftp服务器,然后在releases分支里找到gcc6.3下载,之后解压。

$ cd gcc-6.3.0/
$ mkdir build
$ cd build/
$ ../configure --prefix=/usr/local/gcc-6.3 --disable-multilib --with-system-zlib --enable-languages=c,c++ --with-gmp=/usr/local/gmp-6.1.2 --with-mpfr=/usr/local/mpfr-4.0.1 --with-mpc=/usr/local/mpc-1.1.0 --with-isl=/usr/local/isl-0.18
$ make -j12
$ sudo make install

用原来的命令一直会出错,去掉**--with-system-zlib**

$ ../configure --prefix=/usr/local/gcc-6.3 --disable-multilib --with-system-zlib --enable-languages=c,c++ --with-gmp=/usr/local/gmp-6.1.2 --with-mpfr=/usr/local/mpfr-4.0.1 --with-mpc=/usr/local/mpc-1.1.0

make的过程非常漫长,就算我用了12个线程跑,也花了10分钟左右。

因为我们删除了gcc的链接,因此为了更方便地使用gcc,需要重新链接

$ cd /usr/bin
$ sudo ln -s /usr/local/gcc-6.3/bin/gcc gcc
$ sudo ln -s /usr/local/gcc-6.3/bin/g++ g++
  • 这里可能出现:ln: 无法创建符号链接’gcc’: 文件已存在
    可以将原有的gcc和g++删除/备份
#备份之后删除
sudo cp gcc gcc.bak
sudo cp g++ g++.bak
sudo rm gcc g++

最后检查一下gcc的版本

$ gcc -v

libmpfr.so.6: cannot open shared object file: No such file or directory

编译中出现以上问题。解决方法来自:Ubuntu 下 libmpfr.so.1: cannot open shared object file: No such file or directory 问题

1. 找到libmpfr.so.6的位置
libmpfr.so.6是前面mpfr依赖中的一个文件,前面我们将其安装在/usr/local/,文件就在/usr/local/mpfr-4.0.2/lib

2. 配置动态文件

gedit /etc/ld.so.conf
# 加上以上一句
/usr/local/mpfr-4.0.2/lib

3. 执行命令
执行一句ldconfig

Python.h: 没有那个文件或目录 #include “Python.h”

在c++中没有python的头文件
解决方案参考自:https://blog.csdn.net/qq_42642945/article/details/88316148

sudo apt-get install python-dev   # for python2.x installs
sudo apt-get install python3-dev  # for python3.x installs

我前面一直用的是第一句,安装上了python2之后还是出问题,用第二句安装上python3,解决。

你可能感兴趣的:(PYTHON)