赞
踩
写于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版本有别人编译好的
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
在源码文件夹下执行
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
有很多硬件和模块定制的参数,这里不写了。
很多交叉编译的参数,这里也不写了。
这里也不写了。
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/
把编译出来的复制到系统的即可。比如我是:
缺啥补啥,别直接复制过去哈
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。