我的AI之路(13)--解决编译gcc/g++源码过程中出现的错误

13 篇文章 1 订阅
3 篇文章 1 订阅

     假若你的Linux版本比较高,默认安装使用的gcc/g++版本比较高,比如Fedora28使用的gcc/g++ 8.1,而某些软件源码编译只支持较低版本的gcc版本,比如cuda9.0只支持gcc6(Fedora25默认使用的),cuda9.1/9.2使用gcc7(Fedora27默认使用的),那么一般可以有两种办法:

(1)安装scl后然后安装CentOS的repos源,然后安装devtoolset-6-gcc和devtoolset-6-gcc-g++,然后打开一个terminal窗口执行 scl enable devtoolset-6 bash以启用6.3版的gcc和g++,然后在这个窗口环境里编译caffe。但是安装devtoolset 6时往往要求删除gnome等核心组件的高版本,这点可能造成系统混乱,所以如果没有这些提示,可以继续安装,有这些提示那么就要慎重考虑了,除非你是自己的机器弄坏了可以随便重装。

(2)在https://mirrors.ustc.edu.cn/gnu/gcc/上下载编译源码要求的较低版本的gcc,比如cuda9要求的gcc6序列的gcc-6.4.0.tar.gz到本地解压后编译,其实gcc也有编译好了的二进制版本可以直接下载后使用,但我还是觉得用源码在本机编译出来的好,因为编译过程中你可能会发现很多错误,有无错误和错误的情况可以看出你本机对低版本的gcc的支持情况,像如果你机器上已经默认安装的是gcc8.1,现在想要使用gcc6.x,那么编译gcc6.x源码过程中会出现好些错误,这些错误是因为gcc在升级过程中对头文件的一些结构变量的定义的更改变化没有做向后兼容处理,或者某些语法的严格性要求不一样(比较常见的是struct的定义和申明)。也需你觉得奇怪,为何不加-L参数把头文件搜索路径指向gcc6.x自己源码里的include目录呢?这样做当然可以顺利编译,但是却隐藏了你的gcc6.x和本机的主环境gcc8.1的差异,哪天使用这些不同编译环境时忘了设置完整正确的路径产生了混用情况,可能会出现莫名其妙很多问题,所以我觉得还是自己手工把因差异出现的错误解决掉的好,除非实在解决不了,那么没法,只能以后自己使用时时刻注意头文件的差异。

     假若本级默认安装的gcc版本与你要用源码编译的gcc版本相差不大,一般能顺利编译完,但是如果是8.1和6.4版本差这么多,那编译的过程中就会有不少错误。

首先执行

yum install gcc mpfr-devel libmpc libmpc-devel glibc-devel

安装好依赖包,然后解压gcc-6.4.0源码,然后进入到解压目录里面,执行:

./configure --prefix=/usr/local/gcc64 --program-suffix=64 --enable-languages=c,c++ --disable-multilib

生成Makefile,然后执行make开始编译,编译一阵后就报错:

./md-unwind-support.h:65:48:  error:  dereferencing pointer to incomplete type 'struct ucontext'

   sc = (struct sigcontext *)(void *) &uc_->uc_mcontext);

这个文件实际是./x86_64-pc-linux-gnu/libgcc/md-unwind-support.h,看了一下文件中65行左右的源码,初次看似乎没啥问题,我知道这种错误一般是struct定义变量时不严格引起的,仔细看了一下出错这行前面定义变量uc_的代码:

 struct ucontext * uc_ = context->cfa;

感觉原因是这个struct ucontext *对于要求严格的编译器可能不能这个用,因为定义这个struct的地方实际形式是

struct ucontext

{

  ...

} ucontext_t;

于是试着改成  struct ucontext_t * uc_ = context->cfa;   然后执行make就可以往下走了,后面开始漫长的等待后大约还会报三四个错,多数都是跟结构的定义发生了变化有关,具体细节时间久了有点记不清了,先暂写到这里,等我哪天需要在Fedora28下编译gcc6.x源码时再完善这篇文章。睡觉

解决所有编译错误编译完成后,执行make install把gcc6.4安装到指定目录下去,然后编译要使用此gcc版本的源码时把头文件和库搜索路径都指向这个gcc6.4所在路径,或者重命名系统的/usr/bin/gcc和g++,创建链接指向gcc6.4对应的文件即可开始编译。

 

我的AI之路(1)--前言

我的AI之路(2)--安装Fedora 28

我的AI之路(3)--安装Anaconda3 和Caffe

我的AI之路(4)--在Anaconda3 下安装Tensorflow 1.8

我的AI之路(5)--如何选择和正确安装跟Tensorflow版本对应的CUDA和cuDNN版本

我的AI之路(6)--在Anaconda3 下安装PyTorch

我的AI之路(7)--安装OpenCV3_Python 3.4.1 + Contrib以及PyCharm

我的AI之路(8)--体验用OpenCV 3的ANN进行手写数字识别及解决遇到的问题

我的AI之路(9)--使用scikit-learn

我的AI之路(10)--如何在Linux下安装CUDA和CUDNN

我的AI之路(11)--如何解决在Linux下编译OpenCV3时出现的多个错误

我的AI之路(12)--如何配置Caffe使用GPU计算并解决编译中出现的若干错误

我的AI之路(13)--解决编译gcc/g++源码过程中出现的错误

我的AI之路(14)--Caffe example:使用MNIST数据集训练和测试LeNet-5模型

我的AI之路(15)--Linux下编译OpenCV3的最新版OpenCV3.4.1及错误解决

我的AI之路(16)--云服务器上安装和调试基于Tensorflow 1.10.1的训练环境

我的AI之路(17)--Tensorflow和Caffe的API及Guide

我的AI之路(18)--Tensorflow的模型安装之object_detection

我的AI之路(19)--如何在Windows下安装pycocotools PythonAPI

我的AI之路(20)--用Tensorflow object_detection跑raccoon数据集

我的AI之路(21)--用Tensorflow object_detection跑PASCAL VOC 2012数据集

我的AI之路(22)--使用Object_Detection_Tensorflow_API

我的AI之路(23)--在Windows下编译Bazel和使用Bazel编译tensorflow

 

 

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arnold-FY-Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值