麒麟V10 arm 编译安装 gcc9.3环境

👨‍🎓博主简介

  🏅CSDN博客专家
  🏅云计算领域优质创作者
  🏅华为云开发者社区专家博主
  🏅阿里云开发者社区专家博主
💊交流社区:运维交流社区 欢迎大家的加入!
🐋 希望大家多多支持,我们一起进步!😄
🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏 ⭐️ 加关注+💗


在这里插入图片描述

一、前言需求:

在麒麟V10 arm64架构的服务器上需要使用到gcc9.3,但麒麟V10自带的gcc版本是7.3,麒麟系统自带的sp1和sp2源,默认的gcc版本都是7.3,所以需要升级到gcc9.3才能使用;

麒麟V10 系统默认安装的文件版本地址:http://update.cs2c.com.cn:8080/NS/V10/

二、GCC 9.3安装包下载

gcc安装包下载地址:

9.3安装包下载地址:https://ftp.gnu.org/gnu/gcc/gcc-9.3.0/gcc-9.3.0.tar.gz
其他版本安装包下载地址:http://ftp.gnu.org/gnu/gcc/

可以在服务器上使用wget下载,也可以直接下载上传到服务器上;

三、服务器操作

3.1 下载所需依赖包

# 安装gcc gcc-c++ glibc-static make
yum -y install gcc gcc-c++ glibc-static make
# 安装bzip2
yum -y install bzip2

3.2 解压 GCC 安装包

tar xf gcc-9.3.0.tar.gz

3.3 下载相关的依赖和组件

#先切换到gcc9.3的目录下
cd gcc-9.3.0
#下载相关的依赖和组件
./contrib/download_prerequisites

如果执行:./contrib/download_prerequisites此操作报错:error: Cannot download gmp-6.1.0.tar.bz2 from ftp://gcc.gnu.org/pub/gcc/infrastructure/,那么就手动下载一下(使用清华大学源手动下载):

# 下载gmp-6.1.0
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/gmp/gmp-6.1.0.tar.xz
# 解压
tar -xvf gmp-6.1.0.tar.xz
# 重命名
mv gmp-6.1.0 gmp
 
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/mpfr/mpfr-3.1.4.tar.gz
tar -xvf mpfr-3.1.4.tar.gz
mv mpfr-3.1.4 mpfr
 
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/mpc/mpc-1.0.3.tar.gz
tar -xvf mpc-1.0.3.tar.gz
mv mpc-1.0.3 mpc

3.4 新建一个build目录在gcc9.3.0目录中用于存放编译文件

mkdir build

3.5 编译、安装

#创建完文件夹之后,进入文件夹
cd build
#进入之后编译,指定目录编译安装;
../configure -prefix=/usr/local/ --enable-checking=release --enable-languages=c,c++ --disable-multilib 
#完了之后编译并安装,编译安装需要好几个小时,还请耐心等待!
make -j4 
make install

编译安装需要好几个小时,具体没有测试过,还请耐心等待!


附:编译参数说明:【参数说明来源于:https://blog.csdn.net/LG_15011399296/article/details/127634103

–prefix=/usr/local/ 指定安装路径

–enable-bootstrap 这里引用网上一些文献对该参数的解释:用第一次编译生成的程序进行第二次编译,然后用再次生成的程序进行第三次编译,并且检查比较第二次和第三次结果的正确性,也就是进行冗余的编译检查工作。 非交叉编译环境下,默认已经将该值设为 enable,可以不用显示指定;交叉编译环境下,需要显示将其值设为 disable。

–enable-checking=release 以软件发布版的标准来对编译时生成的代码进行一致性检查;设置该选项为 enable并不会改变编译器生成的二进制结果,但是会导致编译的时间增加;该选项仅支持gcc编译器; 总体而言,对于上面这个选项,机器的硬件配置较低,以及不愿等待太久编译时间的童鞋,可以设置为 disable;但是这会增加产生未预期的错误的风险,所以应该慎用。 可以同时设置 --disable-bootstrap 与 --disable-checking,这对编译过程的提速很有帮助。

–enable-threads=posix 顾名思义,启用posix标准的线程支持 ,要让程序能在符合POSIX规范的linux发布版上正确运行,就应该启用该选项,取决于宿主或目标操作系统的类型,其它可用值有:aix,dec,solaris,win32等,如果你是其它的类UNIX系统,就需要设置相应的值。

–enable-languages=c,c++ 支持的高级语言类型和运行时库,可以设置的所有语言包括 ada,c,c++,Fortran,java,objc,obj-c++,GO 等语言。这里只开启了c和c++,因为支持的语言越多,就需要安装越多的相应静态与动态库,还有五花八门的依赖库,这会让管理变得困难,体积也会变得庞大。

–disable-multilib 如果你的操作系统是32位,默认就已经设置为 disable,这意味着gcc仅能生成32位的可执行程序;如果你的操作系统是64位,默认就已经设置为 enable,这意味着用gcc编译其它源文件时可以通过 -m32 选项来决定是否生成32位机器代码。如果在64位系统上,要禁止生成32位代码, 设置 --disable-multilib。

–enable-gather-detailed-mem-stats 允许收集详细的内存使用信息,如果设置该参数为 enable,则将来编译好的gcc可执行程序,可以通过 -fmem-report 选项来输出编译其它程序时的实时内存使用情况。

–with-long-double-128 指定 long double 类型为128位(16字节!);设置为 without,则 long double类型将为64位(8字节),这将与普通的 double 类型一样。 基于 Glib 2.4以上版本编译时,默认已经是128位。


3.6 查看是否安装成功

查看gcc版本:

gcc -v

如果显示还是7.3的话,那就需要手动软连接一下gcc版本;

# 可以find先查一下xgcc
[root@e2cdbc5ea620 build]# find / -name xgcc
/usr/local/gcc-9.3.0/build/prev-gcc/xgcc
/usr/local/gcc-9.3.0/build/stage1-gcc/xgcc
/usr/local/gcc-9.3.0/build/gcc/xgcc

# 可以看到有一个xgcc是在build下的gcc下的,将这个软连接到/bin下就行了
mv /bin/gcc /bin/gcc.bak 
ln -s /usr/local/gcc-9.3.0/build/gcc/xgcc /bin/gcc

完成软连接之后就再次gcc --version、或者gcc -v查看版本就行,这时候就会显示9.3了。

在这里插入图片描述

  • 查看gcc9.3的动态库
strings /lib64/libstdc++.so.6 | grep GLIBC

在这里插入图片描述

发现动态库还是7.3的,这时候也需要手动去软连接一下库;

# 查一下所有libstdc++.so.6的库,看看最新的是哪个
[root@e2cdbc5ea620 build]# find / -name libstdc++.so.6.*
/usr/lib64/libstdc++.so.6.0.24
/usr/local/gcc-9.3.0/build/stage1-aarch64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.28
/usr/local/gcc-9.3.0/build/aarch64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.28
/usr/local/gcc-9.3.0/build/prev-aarch64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.28

# 可以看到都在编译的路径下[三选一就行],也是先备份,在软连接到/lib64下
mv /lib64/libstdc++.so.6 /lib64/libstdc++.so.6-7.3
ln -s /usr/local/gcc-9.3.0/build/stage1-aarch64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.28 /lib64/libstdc++.so.6

# 软连接完成之后在查一下动态库
strings /lib64/libstdc++.so.6 | grep GLIBC

可以看到有GLIBCXX_3.4.28就算是成功了;

在这里插入图片描述

3.7 安装成功

四、参考文献

参考文章标题参考文章链接🔗
麒麟V10编译安装GCC9.3https://blog.csdn.net/LG_15011399296/article/details/127634103

五、相关文章

文章标题文章链接🔗
Linux中gcc4.8.5升级到gcc5.4.0用已经编译好的安装包升级(重点是不用编译安装,可以更省时)https://blog.csdn.net/liu_chen_yang/article/details/123735242
Centos7 gcc4.8.5升级到版本gcc5.4.0https://blog.csdn.net/liu_chen_yang/article/details/123711779
<think>好的,用户想了解如何安装和使用GCC 12进行编译。首先,我需要回忆GCC安装的一般步骤,并确保覆盖下载源码、解决依赖、配置、编译安装和验证等环节。然后,检查用户提供的引用内容,看看是否有相关信息可以利用。 引用[1]提到在安装GCC前需要准备系统环境安装基本的开发工具如make和gcc,还有bzip2等。这可能意味着在编译GCC 12之前,需要确保这些工具已经存在。引用[2]是关于麒麟V10 arm系统安装GCC 9.3的,其中提到了下载依赖包、解压、创建build目录、编译安装等步骤,这些步骤应该也适用于GCC 12,但可能需要调整版本号和依赖项。引用[3]涉及到TDM-GCC在Windows上的安装和MATLAB配置,但用户的问题是关于GCC 12的,可能主要是在Linux环境下,所以可能需要忽略这部分,除非用户提到Windows。 接下来,我需要整理GCC 12的安装步骤。首先,用户需要下载GCC 12的源码,可能来自官方镜像。然后安装必要的依赖包,如GMP、MPFR、MPC等,这些通常可以通过系统包管理器安装,或者从GCC的源码中下载。接下来,配置编译选项,比如指定安装路径和启用语言支持。然后进行编译,这可能需要较长时间,特别是如果系统资源有限的话。编译完成后进行安装,并更新环境变量,以便系统识别新安装GCC 12。最后,验证安装是否成功,并可能配置动态链接库。 需要注意的是,用户可能在不同的Linux发行版上操作,比如Ubuntu、CentOS或麒麟系统,步骤可能略有不同。例如,依赖包的名称可能因发行版而异。另外,如果用户是在已有的GCC版本上升级,可能需要处理多版本共存的问题,比如使用update-alternatives来管理不同版本的GCC。 另外,用户可能想知道如何使用新安装GCC 12进行编译,所以需要提供简单的使用示例,比如编译C和C++程序,并说明如何指定编译器版本。 还需要检查是否有潜在的依赖问题,例如,编译GCC本身需要已经有一个可用的编译器,这可能是一个旧的GCC版本或Clang。如果系统没有安装这些,用户可能需要先安装基础的构建工具,如build-essential(在Ubuntu上)。 在回答时,要确保步骤清晰,分点说明,并提示用户注意可能的错误,比如依赖缺失或权限问题。同时,参考引用中的内容,如引用[1]提到的下载源码和依赖,引用[2]中的编译安装步骤,可以适当结合到回答中,并在末尾添加引用标识。 最后,生成相关问题,可能涉及依赖项处理、多版本管理、优化编译选项等,以帮助用户进一步探索。</think>### GCC 12 编译安装与配置教程 #### 一、安装前准备 1. **系统环境要求** - 确保系统已安装基础开发工具(如`make`、`gcc`、`g++`、`bzip2`、`wget`等)[^1]。 - 推荐预留至少 **15GB 磁盘空间**,编译过程可能消耗大量资源。 2. **安装依赖项** 执行以下命令安装必要依赖(以 Ubuntu/Debian 为例): ```bash sudo apt update sudo apt install build-essential libgmp-dev libmpfr-dev libmpc-dev libisl-dev zlib1g-dev ``` --- #### 二、下载与解压源码 1. **下载 GCC 12 源码** 从 GNU 官方镜像或国内镜像下载源码包(如 `gcc-12.3.0.tar.gz`): ```bash wget https://ftp.gnu.org/gnu/gcc/gcc-12.3.0/gcc-12.3.0.tar.gz ``` 2. **解压源码并进入目录** ```bash tar -xvf gcc-12.3.0.tar.gz cd gcc-12.3.0 ``` --- #### 三、编译安装 1. **下载依赖组件** GCC 编译需要额外依赖库,通过脚本自动下载: ```bash ./contrib/download_prerequisites ``` 2. **创建独立编译目录** ```bash mkdir build && cd build ``` 3. **配置编译选项** 执行以下命令(可根据需求调整选项): ```bash ../configure --prefix=/usr/local/gcc-12.3.0 --enable-languages=c,c++,fortran --disable-multilib ``` - `--prefix`:指定安装路径 - `--enable-languages`:选择支持的编程语言 - `--disable-multilib`:禁用多架构库支持(需跨架构编译时需开启) 4. **开始编译** 使用多线程加速编译(示例为 8 线程): ```bash make -j8 ``` **注意**:编译时间较长(通常 1~4 小时),建议保持系统稳定。 5. **安装到系统** ```bash sudo make install ``` --- #### 四、配置与验证 1. **添加环境变量** 编辑 `~/.bashrc` 文件,添加以下内容: ```bash export PATH=/usr/local/gcc-12.3.0/bin:$PATH export LD_LIBRARY_PATH=/usr/local/gcc-12.3.0/lib64:$LD_LIBRARY_PATH ``` 生效配置: ```bash source ~/.bashrc ``` 2. **验证安装** ```bash gcc --version ``` 输出应包含 `gcc (GCC) 12.3.0`。 --- #### 五、基本使用方法 1. **编译 C/C++ 程序** ```bash gcc -o hello hello.c # C 程序 g++ -o hellocpp hello.cpp # C++ 程序 ``` 2. **指定优化级别** ```bash gcc -O2 -o optimized_program source.c ``` --- §§ 1. 如何解决 GCC 编译时的依赖冲突问题? 2. GCC 多版本共存时如何切换默认版本? 3. 如何为 GCC 编译启用特定架构的优化选项(如 AVX2)? [^1]: 引用[1] [^2]: 引用[2]
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A-刘晨阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值