Linux驱动开发笔记(二):ubuntu系统从源码编译安装gcc7.3.0编译器

简介: 编译ubuntu驱动之前,发现使用的gcc是7.3.0,而使用apt管理和下载的都无法直接或间接安装gcc7.3.0,于是只能从源码安装gcc7.3.0编译器。

前言

  编译ubuntu驱动之前,发现使用的gcc是7.3.0,而使用apt管理和下载的都无法直接或间接安装gcc7.3.0,于是只能从源码安装gcc7.3.0编译器。


GCC

概述

  GCC是以GPL许可证所发行的自由软件,也是GNU计划的关键部分。GCC的初衷是为GNU操作系统专门编写一款编译器,现已被大多数类Unix操作系统(如Linux、BSD、MacOS X等)采纳为标准的编译器,甚至在微软的Windows上也可以使用GCC。GCC支持多种计算机体系结构芯片,如x86、ARM、MIPS等,并已被移植到其他多种硬件平台。

  GCC原名为GNU C语言编译器(GNU C Compiler),只能处理C语言。但其很快扩展,变得可处理C++,后来又扩展为能够支持更多编程语言,如Fortran、Pascal、Objective -C、Java、Ada、Go以及各类处理器架构上的汇编语言等,所以改名GNU编译器套件(GNU Compiler Collection) 。

下载gcc7.3.0源码

  下载地址:https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz


GCC编译

步骤一:安装所需要的环境

  这里肯定要上网了,要是没有上网则只能自己去下载源码包,然后配置、编译和安装三部曲了,而且还得注意版本号,所以最好还是先安装一次查看版本号,再去下载对应版本号的源码,去目标机离线安装。

  下面是configure配置gcc会出现的问题,所以需要先安装依赖库。

  

sudo apt-get install libgmp-dev
sudo apt-get install libmpfr-dev
sudo apt-get install libmpc-dev

  

  这里安装完,然后装的gcc7.5, 不要卸载已有的gcc,查看“入坑一”。

步骤二:下载解压

tar xvf gcc-7.3.0.tar.gz

  

步骤三:配置configure

./configure

  这里要增加c和c++的配置,不然编译出来只有g++了

./configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

  查看 “入坑二”。

  

步骤四:编译make

make -j4

  

  第一次编译后再下执行几次make -j4,最后再执行一次make,确认每个线程都正常跑完(PS:有些错了就停止了,但是被没停止的线程冲掉了,保持这个习惯即可避免疏忽)。

  编译出错。

步骤五:编译出错“fatal error: asm/errno.h: No such file or directory”

  

  引入error.h的头文件,这里查了很多asm文件夹,最后发现只有asm-generic下的才有error.h

sudo find / -name asm

  以下的一些都没有error.h:

  

  只有asm-generic下的才有error.h

sudo ln -s /usr/include/asm-generic /usr/include/asm

  

  然后继续编译,make -j8

  编译出错。

步骤六:编译出错“sanitizer_syscall_generic.inc:15:24: error: ‘__NR_open’ was not declared in this scope”

  

  这里错误实际上是前面带进来的

sudo ln -s /usr/include/asm-generic /usr/include/asm

  是错误的,需要更改为另外一个,这里要先删除,否则ln新建不了:

sudo rm /usr/include/asm
sudo ln -s /usr/include/x86_64-linux-gnu/asm /usr/include/asm
ls /usr/include/asm
ls -l /usr/include/asm

  

  然后继续编译,make -j8

步骤七:编译成功

  

步骤八:安装

sudo make install

  

  

步骤九:查看版本号确认

  


入坑

入坑一:本地需要g++,否则编译报错

问题

  卸载了g++,编译gcc的时候报错:

  

原理

  可能跟交叉编译一样,交叉编译的编译器也是需要一个编译器编译交叉编译器的源码来生成交叉编译器的(只不过最近几年sdk已经自带了交叉编译器了)

解决

  安装gcc,再次编译即可。

入坑二:安装后只有g++,没有gcc

问题

  gcc版本是7.5,g++版本是7.3。

原理

  配置文件需要配置编译c和c++的,默认只有c++的。

解决

  修改配置文件

./configure

  这里要增加c和c++的配置,不然编译出来只有g++

./configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

  然后重新编译走一遍流程解决。

  

相关文章
|
1月前
|
并行计算 PyTorch TensorFlow
Ubuntu安装笔记(一):安装显卡驱动、cuda/cudnn、Anaconda、Pytorch、Tensorflow、Opencv、Visdom、FFMPEG、卸载一些不必要的预装软件
这篇文章是关于如何在Ubuntu操作系统上安装显卡驱动、CUDA、CUDNN、Anaconda、PyTorch、TensorFlow、OpenCV、FFMPEG以及卸载不必要的预装软件的详细指南。
3270 3
|
29天前
|
Ubuntu Linux 测试技术
Linux系统之Ubuntu安装cockpit管理工具
【10月更文挑战第13天】Linux系统之Ubuntu安装cockpit管理工具
109 4
Linux系统之Ubuntu安装cockpit管理工具
|
1月前
|
监控 Ubuntu Linux
视频监控笔记(五):Ubuntu和windows时区同步问题-your clock is behind
这篇文章介绍了如何在Ubuntu和Windows系统中通过设置相同的时区并使用ntp服务来解决时间同步问题。
64 4
视频监控笔记(五):Ubuntu和windows时区同步问题-your clock is behind
|
1月前
|
Ubuntu 应用服务中间件 nginx
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
本文是关于Ubuntu系统中使用ffmpeg 3.2.16源码编译OpenCV 3.4.0的安装笔记,包括安装ffmpeg、编译OpenCV、卸载OpenCV以及常见报错处理。
140 2
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
|
1月前
|
Ubuntu Linux C语言
Ubuntu安装笔记(二):ubuntu18.04编译安装opencv 3.4.0 opencv_contrib3.4.0
本文介绍了在Ubuntu 18.04系统上编译安装OpenCV 3.4.0及其扩展包opencv_contrib 3.4.0的详细步骤,包括下载源码、安装依赖、配置CMake和编译安装,以及常见问题的解决方法。
83 1
Ubuntu安装笔记(二):ubuntu18.04编译安装opencv 3.4.0 opencv_contrib3.4.0
|
22天前
|
Ubuntu 编译器 计算机视觉
Ubuntu系统编译OpenCV4.8源码
【10月更文挑战第17天】只要三步即可搞定,第一步是下载指定版本的源码包;第二步是安装OpenCV4.8编译需要的编译器与第三方库支持;第三步就是编译OpenCV源码包生成安装文件并安装。
|
29天前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
81 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
1月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
261 3
|
1月前
|
缓存 NoSQL Ubuntu
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
55 3
|
2月前
|
Ubuntu 编译器 C语言
Ubuntu 源码编译指定版本 make:神秘代码背后的激情冒险,等你来战!
【9月更文挑战第8天】在Ubuntu中,编译指定版本的源码`make`是一项挑战但也极具价值的任务。它允许我们根据特定需求定制软件,提升性能与功能适配。首先需安装必要工具包如GCC等;接着下载所需源码并阅读相关文档以了解编译要求。通过运行`./configure`、`make`及`sudo make install`命令完成编译安装流程。过程中可能遇到依赖项缺失或编译选项设置不当等问题,需根据错误提示逐一解决。对于大型项目,可利用多核编译加快速度。掌握这一技能有助于更好地探索开源世界。
44 2