前言
在编译ubuntu驱动之前,我发现使用的gcc是7.3.0,很难直接或间接使用apt管理和下载来安装gcc7.3.0linux 从源码到编译,所以只能从源码中安装gcc7.3.0编译器。
GCC 是在 GPL 许可下发布的自由软件,是 GNU 项目的关键部分。 GCC的初衷是专门为GNU操作系统编译一个编译器。 它已被大多数类 Unix 操作系统(如 Linux、BSD、MacOSX 等)采用作为标准编译器。 GCC 甚至可以在 Google 的 Windows 上使用。 。 GCC支持多种计算机架构芯片,如x86、ARM、MIPS等,并已移植到多种其他硬件平台。
GCC的前身是GNUC语言编译器(GNUCCompiler),只能处理C语言。 然而,它很快扩展并且似乎能够处理 C++。 后来扩展为支持更多的编程语言,如Fortran、Pascal、Objective-C、Java、Ada、Go以及各种处理器架构上的汇编语言,因此名称发生了变化。 GNU 编译器集合(GNUCompilerCollection)。
下载gcc7.3.0源码
下载链接:
GCC编译第一步:安装所需环境
您必须能够访问互联网。 如果您无法上网,则只能自行下载源码包。 然后配置、编译、安装三个三部曲,还要注意版本号,所以最好先安装好,检查一下版本号再下载。 版本号对应的源代码可以在目标机器上离线安装。
以下是configure配置gcc时会出现的问题,所以需要先安装依赖库。
sudo apt-get install libgmp-dev sudo apt-get install libmpfr-dev sudo apt-get install libmpc-dev
这里安装完成后,后面会安装gcc7.5。 不要卸载现有的 gcc。 检查“进入坑1”。
第2步:下载并解压
tar xvf gcc-7.3.0.tar.gz
步骤3:配置配置
./configure
./configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
看看《入坑2》。
第四步:编译make
make -j4
第一次编译后,执行几次make -j4linux 从源码到编译,最后再次执行make,确认各个线程已经正常运行完毕(PS:有些错误停止了,被没有停止的线程冲走了。保持这个习惯可以防止遗漏) 。
编译错误。
步骤5:编译错误“fatalerror:asm/errno.h:Nosuchfileordirectory”
引入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
编译错误。
第6步:编译错误“sanitizer_syscall_generic.inc:15:24:error:'__NR_open'wasnotdeclaredinthisscope”
这里的错误其实是后来带进来的
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
第七步:编译成功
第8步:安装
sudo make install
步骤9:检查版本号以确认
陷阱一:本地需要g++,否则会出现编译错误
卸载g++后,编译gcc时出现错误:
也许和交叉编译一样,交叉编译器也需要编译器将交叉编译器的源代码编译成交叉编译器(不过这几年SDK已经自带了交叉编译器)
安装gcc并再次编译。
陷阱二:安装后只有g++,没有gcc问题
gcc版本是7.5,g++版本是7.3。
原则
解决
更改配置文件
./configure
这里需要减少c和c++的配置,否则只会编译g++。
./configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
然后重新编译,走一遍流程就解决了。