简单方法
如果您是一名典型的开发者,可以按照http://gcc.gnu.org/wiki/InstallingGCC上的说明安装简单方法,或使用系统包管理器。
apt install gcc
yum install gcc
brew install gcc
艰难的方式
GCC认为这里的答案是“艰难的方式”,因为它通过一步一步地构建每个部分来完成操作,并且不使用共享库。
GCC基础设施
获取GCC基础设施:
ftp://gcc.gnu.org/pub/gcc/infrastructure/
将下载文件放在临时目录中(可以使用任何目录)。
/opt/downloads
在与下载目录或其子目录不同的临时目录中构建基础设施:
/tmp/gcc
像这样使用静态库来配置基础设施:
./configure --disable-shared --enable-static --prefix=/tmp/gcc
--disable-shared 标志对于您的需求可能值得更仔细地考虑。我使用 --disable-shared,因为我只构建静态代码,并且我想确保不构建任何共享代码。我的需求是轻松移动生成的GCC到我的驱动器,所以我需要所有静态代码,而且我不想要任何共享代码。如果您喜欢共享代码,请省略 --disable-shared 标记。
版本
运行本答案中的任何命令时,请确保更新命令以使用与您需求相匹配的当前GCC版本号。本答案中的命令适用于GCC 4.6.2。
请注意,GCC文档表示:“虽然任何足够新的必需工具版本通常都可用,但库要求一般更严格。在某些情况下,较新版本可能有效,但使用文档中精确指定的版本更安全。”
GMP
GMP是GNU多精度算术库。
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.bz2
bunzip2 gmp-4.3.2.tar.bz2
tar xvf gmp-4.3.2.tar
cd gmp-4.3.2
./configure --disable-shared --enable-static --prefix=/tmp/gcc
make && make check && make install
MPFR
MPFR是GNU多精度浮点舍入库,依赖于GMP。
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2
bunzip2 mpfr-2.4.2.tar.bz2
tar xvf mpfr-2.4.2.tar
cd mpfr-2.4.2
./configure --disable-shared --enable-static --prefix=/tmp/gcc --with-gmp=/tmp/gcc
make && make check && make install
MPC
MPC是GNU多精度C库,它依赖于GMP和MPFR。
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz
tar zxvf mpc-0.8.1.tar.gz
cd mpc-0.8.1
./configure --disable-shared --enable-static --prefix=/tmp/gcc --with-gmp=/tmp/gcc --with-mpfr=/tmp/gcc
make && make check && make install
ELF
ELF代表可执行和可链接格式。该库提供了与体系结构无关的大小和字节序支持。
wget http://www.mr511.de/software/libelf-0.8.13.tar.gz
tar zxvf libelf-0.8.13.tar.gz
cd libelf-0.8.13
./configure --disable-shared --enable-static --prefix=/tmp/gcc
make && make check && make install
GCC
GCC是GNU编译器集合,它依赖于GMP、MPFR、MPC和ELF。
wget http://www.netgull.com/gcc/releases/gcc-4.6.2/gcc-4.6.2.tar.gz
tar zxvf gcc-4.6.2.tar.gz
在同一个挂载点上的 scratch 目录中构建 gcc。(在 /tmp 中构建会触发跨编译主机问题)
mkdir -p /opt/downloads/gcc-4.6.2-scratch
cd /opt/downloads/gcc-4.6.2-scratch
配置命令及其标志必须在一条命令行上(本帖子将它们显示在不同的行上只是因为网页宽度限制)。
注意:我们使用完整路径来运行configure,不设置库路径环境变量。我们选择禁用bootstrap和禁用共享库,因为我们不需要它们(典型用户可能都需要它们)。同时,我们选择使用posix线程并使用默认标志,因为我们需要它们(典型用户可能希望使用其他线程或跳过默认标志)。你的情况可能有所不同,请在这里阅读相关标志信息
/opt/downloads/gcc-4.6.2/configure
--disable-shared
--disable-bootstrap
--disable-libstdcxx-pch
--enable-languages=all
--enable-libgomp
--enable-lto
--enable-threads=posix
--enable-tls
--with-gmp=/tmp/gcc
--with-mpfr=/tmp/gcc
--with-mpc=/tmp/gcc
--with-libelf=/tmp/gcc
--with-fpmath=sse
make && make install
这个页面非常适合GCC安装信息、如何构建它、各种标志等等:
http://www.acsu.buffalo.edu/~charngda/cc_build.html
更新
ppl库可用于内存优化:请参见bugseng.com/products/ppl/Download(感谢评论中的Paul)
您可以从gcc源目录运行./contrib/download_prerequisites。(感谢reddit上的N7P)
--disable-shared
是错误的;--disable-bootstrap
可能会加快构建速度,但根据现有的 gcc 版本可能导致构建失败;--enable-libgomp
默认已启用;--enable-lto
也默认已启用;--enable-thread-safe
不是有效选项;在某些平台上默认启用--enable-threads=posix
,但在其他平台上则无效;--enable-tls
默认已启用。总的来说,这些指令相当糟糕。 - Jonathan Wakely