ubuntu系统如何源码安装GCC

文章目录

  • 一、前言
  • 二、准备工作
  • 三、下载GCC源代码
  • 四、配置编译选项
  • 五、编译和安装GCC
  • 六、验证GCC是否安装成功
  • 七、设置新安装的GCC为默认版本
  • 八、可能出现的问题及解决方法
  • 九、总结
  • 十、参考资料

一、前言

GCC(GNU Compiler Collection),全称为GNU编译器集合,是一套用于多种编程语言的编译器。它包括C、C++、Objective-C、Fortran、Ada以及Go等语言的前端,并且支持多种处理器架构。GCC是开源软件世界中不可或缺的工具之一,被广泛应用于各种操作系统和平台。

选择源码安装GCC的原因有很多。首先,源码安装通常能提供更多的自定义选项,可以根据具体需求配置GCC的功能。其次,通过源码安装,你可以获取到最新版本的GCC,以便使用最新的编译技术。此外,对于某些特殊环境或旧版系统,可能无法通过包管理器获得最新的GCC,这时源码安装就显得尤为重要。

在本教程中,我们将详细地介绍如何从源代码编译并安装GCC。这个过程可能会比直接使用包管理器安装更为复杂,但也能让你更深入地了解GCC的工作原理。同时,学习源码安装GCC也将帮助你更好地应对其他软件的源码安装过程。


二、准备工作

在开始编译和安装GCC之前,我们需要确保系统环境已经准备好,并且安装了所有必要的依赖软件包。

  1. 确认系统环境(例如Linux发行版)
    首先,你需要确认你的操作系统是支持GCC的。一般来说,大部分Linux发行版都默认包含了GCC,但是版本可能较旧。如果你想使用最新的GCC版本,你可能需要从源代码进行编译和安装。
    另外,不同的Linux发行版可能会有不同的命令行工具和软件包管理器。在本教程中,我们将以Ubuntu为例,介绍如何安装GCC的依赖软件包。如果你使用的是其他Linux发行版,请参考对应的操作系统文档来获取相关的信息。
  2. 安装必要的依赖软件包(如gmp, mpfr, mpc等)
    GCC的编译过程需要一些外部库的支持,包括GMP(GNU Multiple Precision Arithmetic Library)、MPFR(Multiple Precision Floating-Point Reliable)和MPC(Multiprecision Computational Geometry and Linear Algebra)。这些库提供了高精度算术运算的支持,是GCC的重要组成部分。

在Debian/Ubuntu系统上,可以使用以下命令安装基本的构建工具:

sudo apt-get update
sudo apt-get install build-essential

额外的依赖项可能包括:

sudo apt-get install libgmp-dev libmpfr-dev libmpc-dev libc6-dev texinfo flex bison

这将更新你的软件包列表,并安装所需的GMP、MPFR和MPC开发库。


三、下载GCC源代码

  1. 通过GCC官方网站下载最新版本的源代码

首先,访问GCC的官方网站,找到并下载最新的稳定版源代码。不要点"Download",直接点击网页上的**“Source”**按钮,然后在下拉菜单中选择“Source”来获取源代码。

git clone git://gcc.gnu.org/git/gcc.git [SomeLocalDir]
  1. 通过GitHub下载GCC源代码

你也可以通过GCC的GitHub仓库(https://github.com/gcc-mirror/gcc)下载源代码。在这个页面上,你可以找到不同版本的源代码,包括最新的开发版本和稳定版本。要下载一个版本,只需点击对应的标签(如release-12.0.0),然后在新打开的页面上点击绿色的“Code”按钮,选择“Download ZIP”或“Clone”选项来下载或克隆源代码。

https://github.com/gcc-mirror/gcc.git

我用的是github上的代码


四、配置编译选项

  1. 进入GCC源代码目录
    在解压后的目录中,执行以下命令以进入GCC的源代码目录:
  2. 执行./configure命令并设置相关参数(如–prefix=指定安装路径)
    接下来,我们需要运行configure脚本来配置GCC的编译选项。在这个过程中,你可以指定GCC的安装路径、支持的语言以及其他的编译选项。

下面是一个基本的例子:

./configure --prefix=/usr/local --enable-languages=c,c++,fortran,objc,obj-c++ --program-suffix=-12.0.0 --disable-multilib 

在这个例子中,我们指定了GCC的安装路径为/usr/local,并且只支持C、C++、Fortran和Objective-C语言。此外,我们还添加了一个后缀-12.0.0,以便区分系统默认的GCC版本。

下面是参数说明:

  • –prefix=/usr/local:
    这个参数指定了安装目录。在此例中,编译完成后的GCC将被安装在 /usr/local 目录下。这意味着GCC的可执行文件、库文件、文档等都会放在 /usr/local/bin、/usr/local/lib、/usr/local/share/doc 等子目录下。
  • –enable-languages=c,c++,fortran,objc,obj-c++:
    这个参数指定了需要编译的编程语言的编译器。这里包括C ©、C++ (c++)、Fortran (fortran)、Objective-C (objc) 和 Objective-C++ (obj-c++)。这意味着GCC将支持这些语言的编译。
  • –program-suffix=-12.0.0:
    这个参数为安装的程序添加了后缀。在此例中,所有GCC编译的程序(如 gcc、g++、gfortran 等)将带有 -12.0.0 后缀。例如,GCC的可执行文件将被命名为 gcc-12.0.0,而不是默认的 gcc。这对于在同一系统上安装多个版本的GCC非常有用,因为它允许用户区分和选择不同的版本。
  • –disable-multilib:
    此参数用于禁用多库支持。通常,在64位系统上,GCC可能会尝试编译和安装32位(multilib)版本的库。使用这个参数意味着GCC将只为当前系统的原生架构编译程序(例如,仅为64位系统编译)。这有助于减少编译时间和减小安装后的大小,但也意味着不能使用这个GCC版本编译32位程序。

下面是我最常用的命令,prefix一般默认就是/usr/local,不需要设置。

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

五、编译和安装GCC

  1. 使用make命令进行编译

完成配置后,我们可以使用make命令开始编译GCC。这个过程可能需要一段时间,取决于你的计算机性能。你可以通过以下命令启动编译过程:

make -j$(nproc)

这里,-j$(nproc)参数表示使用所有可用的处理器核心进行并行编译,从而加快编译速度。

  1. 使用sudo make install命令进行安装
sudo make install

六、验证GCC是否安装成功

如果在configure的时候设置了--program-suffix=-12.0.0,那么gcc-12.0.0就是我们新安装的gcc。我们可能通过命令,可以通过运行gcc-12.0.0或g+±12.0.0命令来查看GCC的版本信息。例如:

gcc-12.0.0 --version

这将显示刚刚安装的GCC版本的相关信息。

我没有设置这个参数,修改为默认gcc后用gcc --version查看到的版本为14.0.0。


七、设置新安装的GCC为默认版本

如果已经将源码编译的GCC安装在/usr/local目录下,可以通过以下几种方法设置它为默认的GCC:

  1. 方法1:使用update-alternatives(仅限于Debian/Ubuntu)
    对于基于Debian的系统(比如Ubuntu),可以使用update-alternatives系统来管理不同版本的GCC。首先,设置新的GCC版本:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/local/bin/gcc 60 --slave /usr/bin/g++ g++ /usr/local/bin/g++

这里的60是优先级;如果安装了多个版本的GCC,优先级最高的将成为默认版本。
这个命令详细解释一下:

  • update-alternatives:这是Debian及其衍生系统(如Ubuntu)中用于管理同一命令的多个版本的工具。
  • –install:这是一个选项,用于添加一个新的可选项到update-alternatives系统。
  • /usr/bin/gcc gcc /usr/local/bin/gcc 60:这部分命令执行以下操作:
    • /usr/bin/gcc:这是update-alternatives系统中GCC的通用名或链接名。它是调用GCC时所使用的标准路径。
    • gcc:这是特定可选项的名字。
    • /usr/local/bin/gcc:这是新安装的GCC的实际路径。
    • 60:这是分配给这个特定版本的GCC的优先级。在有多个版本的GCC可供选择时,优先级最高的版本会成为默认版本。
  • –slave /usr/bin/g++ g++ /usr/local/bin/g++:这是一个附加命令,用于同时更新g++(GCC的C++编译器)的版本。它确保了切换到新版本的gcc时,相应的g++版本也会被切换。
    • /usr/bin/g++:这是系统中g++的标准路径。
    • g++:这是这个特定版本的g++的名字。
    • /usr/local/bin/g++:这是新安装的g++的实际路径。
      总的来说,这个命令的功能是将编译的GCC(位于/usr/local/bin/gcc)添加到系统中可用的GCC版本中,并设置优先级,同时为g++做相同的操作。这样,当使用gcc或g++命令时,系统将根据设置的优先级来决定使用哪个版本。通过这种方式,可以在不同版本的GCC之间方便地切换。

接下来,使用下面的命令选择默认的GCC版本:

sudo update-alternatives --config gcc

根据提示选择安装的新版本。

  1. 方法2:更新PATH环境变量
    在这种方法中,将修改PATH环境变量,使得系统首先搜索/usr/local/bin中的可执行文件。如果使用的是bash shell,可以在$home/.bashrc文件中添加如下行:
export PATH=/usr/local/bin:$PATH

然后重新加载配置文件,可以通过以下命令实现:

source ~/.bashrc

或者重新登录用户账户。

  1. 方法3:创建软链接
    这种方法涉及到创建指向新GCC版本的软链接。这通常不是首选方法,因为它可能会覆盖或混淆系统默认的GCC链接,但仍可作为一种解决方案。执行以下命令:
sudo ln -sf /usr/local/bin/gcc /usr/bin/gcc
sudo ln -sf /usr/local/bin/g++ /usr/bin/g++

以上三种方法没有优先级,我采用的是第一种。

重要提示:

  • 在更改系统默认GCC之前,请确保这不会对系统中的其他依赖GCC的应用程序产生负面影响。
    如果系统依赖于特定版本的GCC,更改默认版本可能会导致问题。
  • 对于多用户系统,更改整个系统的默认GCC可能会影响所有用户。考虑仅对需要的用户或应用程序更改默认GCC。
  • 在修改环境变量或系统链接时务必谨慎,以避免潜在的系统问题。
  • 根据具体需求和系统环境选择合适的方法。如果在操作过程中遇到问题,可能需要寻求专业帮助或参考相关文档。

八、可能出现的问题及解决方法

在编译和安装GCC的过程中,你可能会遇到各种问题。这里列出了一些常见的问题及其解决方法。

  1. 配置或编译过程中遇到的常见问题
  • 缺少依赖库
    在配置或编译过程中,如果系统提示缺少某个库,例如libgmp-dev、libmpfr-dev或libmpc-dev等,你需要使用包管理器(如apt-get或yum)来安装这些缺失的库。
  • 内存不足
    如果你的计算机内存较小,编译过程可能会因为内存不足而失败。为了解决这个问题,你可以尝试增加交换空间,或者减少并行编译的数量(即降低make -j参数的值)。
  • 编译错误
    编译过程中可能遇到各种错误,例如语法错误、类型不匹配等。对于这些问题,你需要查看错误信息,并根据提示修复代码。
  1. 一些通用的步骤和建议
  • 检查错误日志
    错误信息通常会在 make 的输出中详细说明,尤其是在它遇到问题并停止的地方。
    检查输出信息中是否有更具体的错误描述,这可能会指出问题的原因。
  • 确保满足所有依赖
    编译 GCC 需要一些依赖库和工具,确保系统已经安装了这些依赖。依赖项可能包括但不限于:GMP、MPC、MPFR 等。
  • 使用干净的构建环境
    如果之前尝试过编译,并且部分编译成功,可能需要从一个干净的环境开始。在 GCC 源代码目录中执行make distclean可以清理之前的构建尝试。
  • 关注配置选项
    确保配置选项(执行 ./configure 时使用的选项)适合系统。错误的配置选项可能导致编译失败。如果不确定,可以使用默认的配置选项,或者查找适合系统的特定配置指南。
  • 考虑系统资源
    确保系统有足够的内存和磁盘空间来编译 GCC。GCC 编译过程资源消耗较大。

九、总结

在本教程中,我们详细介绍了如何从源代码编译并安装GCC。整个过程包括了以下几个步骤:

  1. 准备工作:确认系统环境(例如Linux发行版)并安装必要的依赖软件包。
  2. 下载GCC源代码:访问GCC官方网站或GitHub下载最新版本的源代码,并解压到指定目录。
  3. 配置编译选项:进入GCC源代码目录并执行./configure命令以设置相关参数。
  4. 编译和安装GCC:使用make命令进行编译,并使用sudo make install命令进行安装。
  5. 验证GCC是否安装成功:查看GCC版本信息并编译一个简单的C程序来测试GCC是否能正常工作。
  6. 设置新安装的GCC为默认版本:更新系统环境变量并将新安装的GCC设为默认版本。

理解这个过程的重要性在于,它不仅可以帮助你获取最新的GCC版本,还可以让你更深入地了解GCC的工作原理和编译器的内部结构。此外,学习源码安装GCC的经验也可以应用于其他开源软件的安装过程中。

可能的应用场景包括但不限于:

  1. 在某些情况下,你的操作系统可能不提供最新的GCC版本,这时就需要通过源码安装来获取最新的功能和改进。
  2. 如果你需要对GCC进行定制,例如禁用某些特性或者添加新的优化选项,那么源码安装就是一个很好的选择。
  3. 作为开发者,掌握源码安装的过程可以帮助你更好地理解和调试自己的项目。

十、参考资料

以下是几个有用的链接和其他资源,供你进一步了解GCC和源码安装的相关知识:

  • GCC官方网站:https://gcc.gnu.org/
  • GCC用户手册:https://gcc.gnu.org/onlinedocs/gcc/index.html
  • 如何从源代码安装软件 - Arch Linux Wiki:https://wiki.archlinux.org/title/From_Source
  • GitHub上的GCC源代码仓库:https://github.com/gcc-mirror/gcc

你可能感兴趣的:(ubuntu,linux,ubuntu,linux,运维)