因为Ubuntu下面的MATLAB非要用GCC6.3,而且在安装过程中遇到了比之前遇到的任何问题都要多的问题,所以特地开一个帖子来记录下安装过程

环境要求

安装GCC之前有几个库是一定需要的,GMP,mpfr,MPC,isl。至于要不要卸载旧版本的GCC目前尚且不太清楚。在安装GCC时我的系统里安装的GCC的版本是7.4.在安装这些库的过程中有顺序要求,比较好的就是按照GMP,mpfr,MPC,isl的

安装GMP

在GMP的官网下载GMP的最新的安装包,然后解压到自己的电脑上。

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

说明一下,在这段代码中的-prefix参数是用于指定GMP的安装目录,例如这里指定的目录是/usr/local/gmp-6.2.0,那么GMP就会被安装在这个目录之下。这里推荐在之前的解压步骤也是把gmp-6.2.0这个文件夹放在/use/local目录之下。
make 后面的-j12参数用于调用多线程加速编译。
在安装完之后最好用

make check

来测试下自己的安装是否成功,后面的三个库的安装同样需要测试,就不再重复

安装mpfr

同样也是到它的官网下载最新的包,安装过程和GMP的安装类似,执行下面的命令即可。

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

with参数用于指定GMP库的位置。因为要用到之前安装的GMP所以GMP的安装需要放在mpfr之前

安装MPC

官网

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

安装isl

这一步我看到很多博主说不是必须的,因为用到了isl的一个文件,而且在后面的配置过程中程序会检查当前计算机是否安装有isl0.15或者isl0.16.因此建议还是在这个地方把isl装上.

$ cd isl-0.15/
$ mkdir build
$ cd build/
$ ../configure --prefix=/usr/local/isl-0.15 --with-gmp=/usr/local/gmp-6.2.0
$ make -j12
$ sudo make install

这个地方的isl我没有安装最新的版的0.22或者其他博主一样的0.18,而是选择了版本更老的isl-0.15.考虑到程序会检查这步,所以就选择了0.15版本
这里再顺带提一句,isl的安装和上面三个库的安装略有不同, 对解压位置和安装位置有一定的要求,如果和上面的库一样的安装和解压位置的话(指解压和安装的位置都在/usr/local下面),那么很大概率程序会报
configure:error:Installation in source dirctory not supported
的错.这个时候就要求我们的安装位置和解压压缩包的解压位置需要区分开来.就比如说压缩包解压出来的文件夹放在/home/username文件夹下面,安装位置还是/usr/local下面

安装GCC

这是最最最最难的一步,我觉得.在这个过程中碰到了很多奇奇怪怪的问题.下面尽可能的列举一下
在make我们的GCC之前首先需要将上面安装的库文件添加到环境变量中去.

gedit ~/.bashrc

在bashrc的最后添加上这样的指令

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc-1.1.0/lib:/usr/local/gmp-6.2.0/lib:/usr/local/mpfr-4.0.2/lib:/usr/local/isl-0.15/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文件来查看到底是哪里出现了问题
然后执行下面的命令来编译和安装GCC

$ 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.2.0 --with-mpfr=/usr/local/mpfr-4.0.2 --with-mpc=/usr/local/mpc-1.1.0 --with-isl=/usr/local/isl-0.15
$ make -j12
$ sudo make install

错误一

In file included from …/…/…/gcc-6.3.0/libgcc/unwind-dw2.c:401:0:
./md-unwind-support.h: 在函数‘x86_64_fallback_frame_state’中:
./md-unwind-support.h:65:47: 错误: dereferencing pointer to incomplete type ‘struct ucontext’
sc = (struct sigcontext *) (void *) &uc_->uc_mcontext;

解决方法:
/usr/local/gcc-6.3.0/build/x86_64-pc-linux-gnu/libgcc下找到文件md-unwind-support.h,将第61行struct ucontext *uc_ = context->cfa;,修改为struct ucontext_t *uc_ = context->cfa;

错误二

…/…/…/…/gcc-6.3.0/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc: 在函数‘int __sanitizer::TracerThread(void*)’中:
…/…/…/…/gcc-6.3.0/libsanitizer/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc:270:22: 错误: 聚合‘sigaltstack handler_stack’类型不完全,无法被定义
struct sigaltstack handler_stack;

或者是

aggregate ‘sigaltstack handler_stack’ has incomplete type and cannot be definedstruct sigaltstack handler_stack;

意思都是一个意思,这里可以借鉴Fix sanitizer build against latest glibc这个网址的方法,在这个网址的最后有修改前后的对比图,详细的展示了如何修改.

解决完这样两个大问题之后编译就可以正常通过了,虽然最后写起来似乎编译也就这么回事,问题也不是很困难,找到修改的地方修改就行了.但是不断的在搜索引擎上查找资料的过程却是最漫长的.
再提一点建议,善用搜索引擎,多多查看config.log.多往上翻翻究竟什么地方出错了.因为即使错误类型不一样在编译出错的最下面的报错方式却几乎大同小异.

创建软链接

$ 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命令,ln -s后面的第一个参数是被链接的目标的绝对路径,也就是gcc的在操作系统下的绝对路径,第二个参数是对链接目标创建的符号路径

最终成果

参考文章

  • 针对报错aggregate ‘sigaltstack handler_stack’ has incomplete type and cannot be defined的另一种解决方式,虽然因为没看懂怎么操作的没有采用:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81066
  • 一个小坑:https://blog.csdn.net/Xin_101/article/details/89356935,这篇文章中也提到了上述两个问题的解决方式,但是第二个问题他提供的解决方式似乎并不能完全的解决问题,而且会出现stack_t不是一个类型名,未声明的新报错.当时在这个地方卡了很久,引以为戒
  • .主要参考文章: https://blog.csdn.net/yrc19950911/article/details/86184269.这篇文章是在Ubuntu16.04环境下编译和安装6.3.0的.因此安装的数据库的版本和本文略微有些不同,但是对错误的解决方式除了导入环境变量几乎没有提.

Ubuntu18.04下磕磕磕绊绊绊编译安装GCC6.3的过程相关推荐

  1. Ubuntu18.04下NVIDIA驱动+CUDA11.0安装

    安装Ubuntu18.04 一.准备工作 电脑GPU型号.Ubuntu版本.NVIDIA驱动版本.CUDA版本.这四个需要相互匹配,具体见官网. 我的配置是: 显卡:GT 710 Ubuntu : 1 ...

  2. Ubuntu18.04下px4+MAVROSM+QGC地面站安装教程及避坑指南

    下面安装建立在已经安装好了ROS的基础,未安装ROS的请先按照下面教程安装ROSROS 安装教程 目录 一.安装px4_toolchain 二.编译PX4固件 三.mavros and mavlink ...

  3. Ubuntu18.04下Opencv的安装及使用实例

    本文主要介绍了在Ubuntu18.04系统下练习编译.安装著名的C/C++图像处理开源软件库Opencv 3.4.12(过程多,耗时长,需要耐心和细心) 目录 一.Opencv简介 二.Opencv安 ...

  4. Ubuntu18.04 下图像处理开源软件库Opencv3.4.16的安装及使用

    文章目录 一.安装Opencv3.4.16 1.安装Ubuntu图形界面 2.下载Opencv3.4.16安装包 3.使用cmake安装opencv 4.使用make创建编译 5.配置环境 6.查看o ...

  5. Ubuntu18.04下安装NVIDIA显卡驱动、docker、nvidia-docker;容器中编译安装opencv-4.4.0与darknet-yolov4并完成测试;容器封装镜像转移。2022

    记录一下第一次在CSDN发博客,欢迎大家光临~ 文章目录 前言 一.宿主机配置 1.安装Ubunntu18.04 64位系统 2.为宿主机系统更换国内软件源Ubuntu 官方源服务器在欧洲,国内访问很 ...

  6. caffe在ubuntu18.04下编译

    <!---title:caffe在ubuntu18.04下编译--> <!---keywords:caffe, build, ubuntu18,--> 原始引用地址:  [ca ...

  7. ubuntu18.04下安装grafana6和简单使用

    ubuntu18.04下安装grafana6 环境 ubuntu18.04 下载 sudo apt-get install -y adduser libfontconfig1 # 使用wget 下载会 ...

  8. ubuntu18.04下hadoop安装与集群配置

    ubuntu18.04下hadoop安装与集群配置 hadoop安装_单机/伪分布式配置 环境 创建hadoop用户 更新apt 安装SSH.配置SSH无密码登陆 安装Java环境 安装 Hadoop ...

  9. Ubuntu18.04下的PCL安装(摸爬滚打)

    目录 Ubuntu18.04下的PCL安装 1.先安装Qt5,X11,OpenGL 1)安装Qt5 2)安装x11 3)安装OpenGL 4)安装libglut-dev 2.安装VTK(直接把pcl依 ...

最新文章

  1. 高速串行总线设计基础(三)SERDES的通用结构介绍
  2. VS2015 无法启动 IIS服务器
  3. 常用CSS元素div ul dl dt ol的简单解释
  4. ELK 之二:ElasticSearch 和Logstash高级使用
  5. java调用reader的nextInt_Java中如何从键盘输入内容: import java.util.Scanner; .nextLine(); .hasNextInt();...
  6. jzoj5223-B【矩阵乘法】
  7. 数据结构与算法(C#版)第二章 C#语言与面向对象技术(下)V1.0
  8. Autoware(2)—加载地图数据
  9. 收到计算机系统公司退款会计分录,​收到客人的退款的会计分录怎么写
  10. Ubuntu16.04下 编译安装 Tensorflow
  11. 使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置)...
  12. linux下adb工具的安装目录下,adb工具包如何安装?怎么用?
  13. u盘数据丢失了怎么恢复?u盘数据恢复,2个方案完成
  14. linux 域名劫持,域名被劫持处理方案
  15. 通过linux进程号(pid)查找Oracle的session中都执行那些sql
  16. 音频之PCM与WAV
  17. Real World Games Look Like Spinning Tops (DeepMind NIPS2020) 论文阅读记录
  18. 自己搭建服务器要多少钱?
  19. 2021半年盘点,这些经典更新了!
  20. leetcode 2007. 从双倍数组中还原原数组(C++、java、python)

热门文章

  1. 商品加入购物车的动画
  2. 无线网桥干货收藏 | 一文带你从初识到懂行
  3. 用python画熊_Python绘制PDF,CDF
  4. Doxygen wizard
  5. html好看的按钮css样式大全,css3教程_五种漂亮样式,CSS3动画按钮效果
  6. python时间戳转日期格式
  7. 什么是智能综合布线?
  8. 搬运工做起了石头生意,他的石雕产品深受喜爱
  9. OSChina 周三乱弹——青蛙和癞蛤蟆的区别
  10. c语言分数怎么化成整数,分数怎么化成整数 分数转化方法