linux 手动编译最新gcc

前言

写于2022.06.15.23:47 时下最新的gcc版本是12.1.0
官方教程地址:
Installing GCC- GNU Project

前提条件

Host/Target specific installation notes for GCC- GNU Project
首先得在上面的网址根据操作系统和硬件架构看看你合不合适通用的安装,或者合不合适编译gcc。
大多数人的电脑都是amd64/x86_x64可以跳过这一步。

现成版本

Build status for GCC- GNU Project
目前只有8.x版本有别人编译好的

编译条件

  1. ISO C++11 compiler 一个现成的编译器,大伙应该都有吧,就一个老版本的clang或者gcc
  2. 2.C standard library and headers
  3. make
  4. tar
  5. posix 标准的shell ,bash zsh 等等。
  6. GNAT
  7. GDC
  8. A POSIX or SVR4 awk
  9. GNU binutils
  10. Perl
    …还有一堆。

下载源码

GCC Releases- GNU Project
上面是所有的release
​​​​​​GCC mirror sites- GNU Project
上面是所有的镜像站,但是中国大陆没有,我个人推荐俄罗斯的,比较快
当然除了镜像之外也可以用git的。比较麻烦不做说明,git的流程在这个网址
GCC: Anonymous read-only Git access- GNU Project·
俄罗斯镜像站:
Index of /gnu/gcc
里面release文件夹底下选个版本,比如说我这里就算gcc-12.1.0
选.xz .gz分别用各自的解压工具解压一下 xz就是xz -d 文件名 再来 tar -xf 上一步解压出来的文件名。gz就tar -xzf 文件名
这步完成后会解压到 gcc-版本号 这个文件夹里。

下载依赖项

./contrib/download_prerequisites

在源码文件夹下执行

配置gcc

Installing GCC: Configuration- GNU Project

GNU的软件编译前都是得配置一下的。现在有几个变量说明一下

srcdir :gcc源代码的文件夹,就是上面提到的gcc-版本号
objdir :你想把gcc安装到的文件夹。

然后创建文件夹,进入想安装到的文件夹,运行配置指令:

mkdir objdir
cd objdir
srcdir/configure [options] [target]

如果你是分发者的话,有一些指令,比如加入你的version,url,doc的地址之类的,分发者的细节这里不提。
本机自用的话我建议的参数是:

srcdir/configure --enable-checking=release --enable-languages=all --enable-threads

使用上面的参数可以让你不必深究很多多余的东西,比如下面列的和gcc官方说明里的。
下面是configure的一些参数:

架构

--host=cpu-company-system

比如:

./configure --host=x86_64-pc-linux-gnu

指明这个编辑要运行的硬件和系统环境,本机自用的话是可以忽略的,会自动推断。CPU-types和system-types上面的链接里给了张表

安装目录

--prefix=dirname

指明最上层的安装目录。本机使用可省略。

默认是在/usr/local里。注意,极其不推荐dirname为objdir或odjdir子文件夹,或在home下。

dir相关的还有一些推荐通常不修改的默认设置,大概是里面lib或者header的默认位置。如果没有需要,请不要修改,修改可能会导致有的软件找不到位置。

可执行文件名

--program-prefix=prefix

设置可执行文件前缀。本机使用可省略。

比如:

-program-prefix=foo-

使得编译出来的可执行文件不叫gcc而叫foo-gcc

--program-suffix=suffix

设置可执行文件后缀。可以把后缀设置成版本好,比如我这里可以设置suffix为12.1.0这样可以和其他gcc版本做区分,但是同时,可能需要update-alternative来选择正确的默认gcc。

功能块

有一些功能可以禁用,这样可以节约一些编译时间,比如很多东西的multilib但是对于大多数人来说,都是一晚上,所以无所谓,何况你可能真的能用上那些呢。

大小端

--with-endian=endians

设置大小端。本机使用可省略。

endians大小端
big只大端
little只小端
big,little默认大端,为小端产生multilib
little,big默认小端,为大端产生multilib

线程

--enable-threads

大多数系统都是默认执行这个的,如果希望线程支持最好还是加上。注意gcc认为threads在系统不可用的时候,这句话退化成等于–enable-threads=single.也就是和–disable-threads是一样的。

--disable-threads

等于–enable-threads=single.单线程模式。

--enable-threads=lib

设置对应的线程库。默认可以省略,会自动推导。

lib可以是:

  • aix AIX thread support.

  • dce DCE thread support.

  • lynx LynxOS thread support.

  • mipssde MIPS SDE thread support.

  • no 单线程=single

  • posix posix标准嘛

  • rtems RTEMS thread support.

  • single 禁用线程,应该是全平台适用的

  • tpf TPF thread support.

  • vxworks 看到这个系统我就生气噗

  • win32 win32的线程api

--enable-tls
--disable-tls

设置是否启用Thread Local Storage,本机自用可省略。

语言

--enable-languages=lang1,lang2,…

设置支持的语言,=号后面可以是:

all, default, ada, c, c++, d, fortran, go, jit, lto, objc, obj-c++.

default不包含:

Ada, D, Go, Jit, Objective-C++ ,LTO

all包含所有,但是假如要用jit还需要加–enable-host-shared

检查

--enable-checking

检查编译器是不是正确,后面可以加=和参数,是检查级别,比如=release

硬件定制

有很多硬件和模块定制的参数,这里不写了。

交叉编译

很多交叉编译的参数,这里也不写了。

object-c 专门的参数

这里也不写了。

编译

Installing GCC: Building- GNU Project

配置完了之后就可以编译啦

通常直接在objdir下执行make即可,除非你有省空间之类的特殊需求请参阅:

make适用-j参数多线程make。-j后根的数字最好为硬件的线程数量。

比如我这里:

make -j$(nproc) #$(nproc)为逻辑核心数,就是线程数

网上都说时间会很长,并且由于在前面的configure里面我们没有加锁,所以这段时间建议干干和编译无关的事,睡觉之类的。
但是笔者自己半个小时不到搞定了,所以应该也不会用很久。

安装

继续在objdir下执行命令即可。需要root权限,要么su root 要么加sudo 或者你本来就是root

make install

由于前面说了我们用默认的安装目录,所以会安装在usr/local内,可执行的gcc,g++在usr/local/bin/内
查看版本:

gcc -v
/usr/local/bin/gcc -v

大功告成啦

使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/12.1.0/lto-wrapper
目标:x86_64-pc-linux-gnu
配置为:../gcc-12.1.0/configure --enable-checking=release --enable-languages=all --enable-threads
线程模型:posix
Supported LTO compression algorithms: zlib
gcc 版本 12.1.0 (GCC) 

重要 处理后事

手动编译gcc到最新版,不会更新系统的动态库,比如,我系统的动态库在

/lib/x86_64-linux-gnu/

编译出来的在:

objdir/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/

把编译出来的复制到系统的即可。比如我是:
缺啥补啥,别直接复制过去哈

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值