CentOS用户目录编译安装GCC4.8.2

1. 指定临时文件夹

configure的时候,发现由于系统根目录没有多余的空间, 无法使用temp目录(在其中创建临时文件),从而导致无法配置。 这里参考[1]的博客,通过指定环境变量TMPDIR到用户目录下,起到替代系统的临时文件夹的作用:

1
2
3
4
5
mkdir $HOME/local/tmp
# 每次需要替换时,设定环境变量
export TMPDIR=$HOME/local/tmp
# 或者在.bashrc中设置alias,每次需要时候通过alias来定义
alias stpj="export TMPDIR=$HOME/local/tmp"

这样之后再次configure,问题正确解决。

2. 编译安装gcc4.8.2

这里编译gcc是为了能够通过OpenFOAM-6的编译安装。首先选择了4.8.2版本进行测试, 在实际测试中出现了如下的问题, 可以看出提示中显示找不到gcc-4.8.5,难道要求的最低版本是4.8.5?

总结

由此可见,在编译之前,大致查看编译流程以及脚本文件是很有必要的,在此处就能避免踩雷, 绕开不必要的弯路

保险起见重现安装一个gcc-4.8.5。(他们的依赖文件版本是相同的,省事)

编译过程中的问题
1
2
3
4
5
6
[zhyang@K227 OpenFOAM]$ source $HOME/OpenFOAM/OpenFOAM-6/etc/bashrc WM_COMPILER_TYPE=ThirdParty WM_COMPILER=Gcc48 WM_MPLIB=OPENMPI FOAMY_HEX_MESH=yes

Warning in /home/zhyang/OpenFOAM/OpenFOAM-6/etc/config.sh/settings:
Cannot find /home/zhyang/OpenFOAM/ThirdParty-6/platforms/linux64/gcc-4.8.5 installation.
Please install this compiler version or if you wish to use the system compiler,
change the 'WM_COMPILER_TYPE' setting to 'system'

gcc4.8.2不够,至少要4.8.5,下面重新安装gcc4.8.5。

3. 编译安装gcc4.8.5

3.1 源码下载及解压

源码下载
1
2
3
wget ftp://ftp.gnu.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.gz
源码解压
tar xf gcc-4.8.5.tar.gz

3.2 依赖包下载、解压、移动

1
2
cd gcc-4.8.5
./contrib/download_prerequisites

在节点上是不能联网下载滴,所以需要手动下载好,然后传上去。该脚本的内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
MPFR=mpfr-2.4.2
GMP=gmp-4.3.2
MPC=mpc-0.8.1

wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$MPFR.tar.bz2 || exit 1
tar xjf $MPFR.tar.bz2 || exit 1
ln -sf $MPFR mpfr || exit 1

wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$GMP.tar.bz2 || exit 1
tar xjf $GMP.tar.bz2 || exit 1
ln -sf $GMP gmp || exit 1

wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$MPC.tar.gz || exit 1
tar xzf $MPC.tar.gz || exit 1
ln -sf $MPC mpc || exit 1

rm $MPFR.tar.bz2 $GMP.tar.bz2 $MPC.tar.gz || exit 1

实际调用的下载文件命令:

1
2
3
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.bz2
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz

将这三个文件下载后放到节点上的gcc-4.8.5/contrib/目录中,然后修改download_prerequisites的内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
MPFR=mpfr-2.4.2
GMP=gmp-4.3.2
MPC=mpc-0.8.1

# wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$MPFR.tar.bz2 || exit 1
tar xjf $MPFR.tar.bz2 || exit 1
ln -sf $MPFR mpfr || exit 1

# wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$GMP.tar.bz2 || exit 1
tar xjf $GMP.tar.bz2 || exit 1
ln -sf $GMP gmp || exit 1

# wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$MPC.tar.gz || exit 1
tar xzf $MPC.tar.gz || exit 1
ln -sf $MPC mpc || exit 1

rm $MPFR.tar.bz2 $GMP.tar.bz2 $MPC.tar.gz || exit 1

然后调用./contrib/download_prerequisites,完成解压操作。

这三个依赖也是需要编译的,参考 [2]的做法,将这三个解压后的文件夹移动到上一层, 就不需要分别单独编译了,而是在gcc编译的时候一起编译。(否则可以通过--with-mpc=MPC目录--with-mpfr=MPFR目录--with-gmp=GMP目录

1
2
3
mv gmp-4.3.2/ ../gmp
mv mpfr-2.4.2/ ../mpfr
mv mpc-0.8.1/ ../mpc

3.3 配置、编译、安装

执行configure命令,生成makefile文件:

1
./configure --prefix=$HOME/local/gcc/gcc-build-4.8.5 --enable-checking=release --enable-languages=c,c++ --disable-multilib
  • 选项说明(具体的选项可以通过configure --help查看) [3]

—prefix:指定gcc的安装路径,默认是在/usr/local下,这里指定$HOME/local/gcc/gcc-build-4.8.5

—enable-languages:指定gcc能编译哪些语言,每种语言用都好隔开 (help中没有该选项?只有—enable-stage1-languages,默认为all);

—disable-multilib:默认gcc能在32位系统上编译得到64位程序, 或者在64位系统上编译成32位,加上该选项则禁用该功能(help中也没看到该选项)。

  • 编译

    1
    2
    并行编译,按需调整数字
    make -j4
  • 安装

    1
    make install

最终编译得到的文件在$HOME/local/gcc/gcc-build-4.8.5文件夹中, 其中二进制文件(相关软连接)在bin子目录中, 相关库文件在liblib4子目录中, 通过添加环境变量,或使用绝对路径来调用。


  1. linux出现tmp空间满的情况解决 点击跳转 ↩︎

  2. centos安装gcc4.8 点击跳转 ↩︎

  3. GCC4.8.2编译安装 点击跳转 ↩︎