重庆思庄Oracle、Redhat认证学习论坛

标题: rhel9.1 gcc 12.2 编译 [打印本页]

作者: 郑全    时间: 2022-11-21 17:44
标题: rhel9.1 gcc 12.2 编译
本帖最后由 郑全 于 2022-11-21 17:57 编辑

趁疫情封闭期间,想做一个切底的opengauss 数据库的源码安装,包含GCC的安装,发现GCC并不好编译,她需要其他软件的依赖的和对应的版本,试了几天,终于通过了,
make 编译过程比较漫长,想试一下的朋友们,需要一点耐心哟。

以下是已经验证过可以正确编译安装的步骤给大家参考


以 redhat linux 9.1 系统,x86-64 架构,gcc12.2 版本为例 (其他版本的 gcc 也与此相同)。 Gcc 具体编译依赖 gmp isl mpc mpfr ,需要先编译这四个库。

GCC源码地址:
gcc   http://ftp.gnu.org/gnu/gcc/gcc-12.2.0/gcc-12.2.0.tar.gz

依赖软件地址如下:

gmp        http://ftp.gnu.org/gnu/gmp/gmp-6.2.1.tar.xz
mpfr        http://ftp.gnu.org/gnu/mpfr/mpfr-4.1.1.tar.gz
mpc        http://ftp.gnu.org/gnu/mpc/mpc-1.2.1.tar.gz
isl        https://gcc.gnu.org/pub/gcc/infrastructure/isl-0.24.tar.bz2

1.上传软件到 /root
   将这几个软件上传到服务器上面,按照如下顺序进行编译
   [root@ogserver ~]# pwd
   /root
   [root@ogserver ~]# ls -ltr
   total 159124
   -rw-r--r--.  1 root root     2027316 Nov 20 10:46 gmp-6.2.1.tar.xz
   -rw-r--r--.  1 root root      838731 Nov 20 10:53 mpc-1.2.1.tar.gz
   -rw-r--r--.  1 root root     2261594 Nov 20 10:54 isl-0.24.tar.bz2
   -rw-r--r--.  1 root root   149729936 Nov 20 10:57 gcc-12.2.0.tar.gz
   -rw-r--r--.  1 root root     2127188 Nov 20 11:07 mpfr-4.1.1.tar.gz

2.建立编译后软件的目录
   # mkdir -p /software/target/

3. 编译 gmp
解压:tar -xf gmp-6.2.1.tar.xz

编译C语言,需要gcc编译器,否则,编译 gmp会报错,同时,还需要m4

# yum  -y install gcc  m4

编译: prefix 路径可以自己指定,表示编译结果存放路径。
# cd gmp-6.2.1
# ./configure --prefix=/software/target/gmp
# make –j
# make install –j

4. 编译 mpfr
解压: tar –xf mpfr-4.1.1.tar.gz

编译: --prefix 路径自己指定,--with-gmp 路径为上一步 gmp 编译的 prefix 路径。下面与此相同。
# cd mpfr-4.1.1
# ./configure --prefix=/software/target/mpfr --with-gmp=/software/target/gmp
# make –j
# make install -j

5. 编译 mpc
解压: tar –xf mpc-1.2.1.tar.gz

编译:
# cd mpc-1.2.1
# ./configure --prefix=/usr2/zxb/compile/target/mpc --with-gmp=/usr2/zxb/compile/target/gmp --with-mpfr=/usr2/zxb/compile/target/mpfr
# make –j
# make install -j
6. 编译 isl
解压: tar –xf isl-0.24.tar.bz2
注意:直接解压要报错,需要先安装 bzip2
# yum install bzip2

编译:
# cd isl-0.24
# ./configure --prefix=/usr2/zxb/compile/target/isl --with-gmp-prefix=/usr2/zxb/compile/target/gmp
# make –j
# make install -j
7. 编译 gcc
必须把前面gcc 需要的依赖项都安装上,才能编译安装GCC

# yum install gcc-c++ glibc-devel

导入环境变量
# export LD_LIBRARY_PATH=/usr2/zxb/compile/target/gmp/lib:/usr2/zxb/compile/target/mpfr/lib:/usr2/zxb/compile/target/mpc/lib:/usr2/zxb/compile/target/isl/lib:${LD_LIBRARY_PATH}
# export C_INCLUDE_PATH=/usr2/zxb/compile/target/gmp/include:/usr2/zxb/compile/target/mpfr/include:/usr2/zxb/compile/target/mpc/include:/usr2/zxb/compile/target/isl/include:${C_INCLUDE_PATH}

环境变量中的路径,为上面编译的几个三方库各自的 prefix 路径。

解压 gcc
# tar -xvf gcc-12.2.0.tar.gz

编译 gcc
# cd gcc-12.2.0
# mkdir build -- #不能在source目录下, configure必须在上一层的目录下
# cd build

# ../configure CFLAGS='-fstack-protector-strong -Wl,-z,noexecstack -Wl,-z,relro,-z,now '  \
      --prefix=/software/target/gcc \
      --with-gmp=/software/target/gmp \
      --with-mpfr=/software/target/mpfr \
      --with-mpc=/software/target/mpc \
      --with-isl=/software/target/isl \
      --disable-multilib --enable-languages=c,c++
-- 这步很快就完成,输出中,会看到下面的信息:
。。。
line 81: makeinfo: command not found
。。。
-- 这个不可以忽略。

# make                          --这一步,花了3小时
# make install

8.编译完后,确认
   [root@ogserver ~]# ls -ltr /software/target/
   total 0
   drwxr-xr-x. 5 root root 45 Nov 20 23:29 gmp
   drwxr-xr-x. 5 root root 45 Nov 20 23:33 mpfr
   drwxr-xr-x. 5 root root 45 Nov 20 23:35 mpc
   drwxr-xr-x. 4 root root 32 Nov 20 23:51 isl
   drwxr-xr-x. 8 root root 84 Nov 21 04:51 gcc

   # /software/target/gcc/bin/gcc -v    # 查看升级后的gcc版本信息,验证安装是否成功


  [root@ogserver build]# /software/target/gcc/bin/gcc -v
  Using built-in specs.
  COLLECT_GCC=/software/target/gcc/bin/gcc
  COLLECT_LTO_WRAPPER=/software/target/gcc/libexec/gcc/x86_64-pc-linux-gnu/12.2.0/lto-wrapper
  Target: x86_64-pc-linux-gnu
  Configured with: ../configure CFLAGS='-fstack-protector-strong -Wl,-z,noexecstack -Wl,-z,relro,-z,now ' --prefix=/software/target/gcc --with-gmp=/software/target/gmp --    with-mpfr=/software/target/mpfr --with-mpc=/software/target/mpc --with-isl=/software/target/isl --disable-multilib --enable-languages=c,c++
  Thread model: posix
  Supported LTO compression algorithms: zlib
  gcc version 12.2.0 (GCC)


   
   









欢迎光临 重庆思庄Oracle、Redhat认证学习论坛 (http://bbs.cqsztech.com/) Powered by Discuz! X3.2