您的位置:首页 > 运维架构 > Linux

在RHEL 6.4 x86_64平台上把编译器从gcc-4.4.7-3.el6.x86_64升级到最新版的编译器gcc-4.8.2

2013-11-28 08:09 681 查看
第一、现有主机操作系统平台的基本情况

1.1、软件平台和环境

[root@geosci ~]# uname -a

Linux geosci
2.6.32-358.el6.x86_64 #1 SMP Tue Jan 29 11:47:41 EST 2013 x86_64 x86_64 x86_64 GNU/Linux

[root@geosci ~]# gcc -v

Using built-in specs.

Target: x86_64-redhat-linux

Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release
--with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile
--enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux


Thread model: posix
gcc version 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC)

[root@geosci ~]# rpm -qa|grep gmp

gmp-4.3.1-7.el6_2.2.x86_64

[root@geosci ~]# rpm -qa|grep mpfr

mpfr-2.4.1-6.el6.x86_64

[root@geosci ~]# rpm -qa|grep mpc

libmpcdec-1.2.6-6.1.el6.x86_64

1.2、硬件平台情况

[root@geosci proc]# more cpuinfo

processor    : 0~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~7

vendor_id    : GenuineIntel

cpu family    : 6

model        : 58

model name    : Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz

stepping    : 9

cpu MHz        : 1600.000

cache size    : 8192 KB

physical id    : 0

siblings    : 8

core id        : 0

cpu cores    : 4

apicid        : 0

initial apicid    : 0

fpu        : yes

fpu_exception    : yes

cpuid level    : 13

wp        : yes

flags        : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr ss

e sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf

pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline

_timer aes xsave avx f16c rdrand lahf_lm ida arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpid fsgsb

ase smep erms

bogomips    : 6819.88

clflush size    : 64

cache_alignment    : 64

address sizes    : 36 bits physical, 48 bits virtual

power management:

[root@geosci proc]# more meminfo

MemTotal:       16012772 kB

MemFree:          516516 kB

二、安装前的准备

2.1、下载

下载gmp-4.3.2.tar.bz2、mpfr-2.4.2.tar.bz2、mpc-0.8.1.tar.gz三个软件包

先创建相关空目录

[root@geosci gmp-4.3.2]# mkdir /usr/local/gmp4.3.2

[root@geosci gmp-4.3.2]# mkdir /usr/local/mpfr2.4.2

[root@geosci gmp-4.3.2]# mkdir /usr/local/mpc0.8.1

2.按顺序安装三个软件包

进入gmp-4.3.2.tar.bz2存放目录

[root@geosci gmp-4.3.2]# tar -jxf gmp-4.3.2.tar.bz2

[root@geosci gmp-4.3.2]# cd gmp-4.3.2

[root@geosci gmp-4.3.2]# ./configure --prefix=/usr/local/gmp4.3.2/

[root@geosci gmp-4.3.2]# make -j16                         注:16与你CPU内核数相关,表示并行编译,可加快速度,具体可在网络上了解细节。也可以是:-j2 -j4 -j8

[root@geosci gmp-4.3.2]# make install

会出先如下一部分信息:

.....................................................................................................................................................................................................................................

Libraries have been installed in:

   /usr/local/gmp4.3.2//lib

If you ever happen to want to link against installed libraries

in a given directory, LIBDIR, you must either use libtool, and

specify the full pathname of the library, or use the `-LLIBDIR'

flag during linking and do at least one of the following:

   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable

     during execution

   - add LIBDIR to the `LD_RUN_PATH' environment variable

     during linking

   - use the `-Wl,--rpath -Wl,LIBDIR' linker flag

   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for

more information, such as the ld(1) and ld.so(8) manual pages.

................................................................................................................................................................................................................................................

[root@geosci gmp-4.3.2]# make check

[root@geosci gmp-4.3.2]# make clean

[root@geosci mpfr-2.4.2]# tar jxf mpfr-2.4.2.tar.bz2

[root@geosci mpfr-2.4.2]# cd mpfr-2.4.2

[root@geosci mpfr-2.4.2]# ./configure --prefix=/usr/local/mpfr2.4.2/ --with-gmp=/usr/local/gmp4.3.2/ &&make -j16 &&make install &&make check &&make clean

[root@geosci mpc-0.8.1]# tar xzf mpc-0.8.1.tar.gz

[root@geosci mpc-0.8.1]# cd mpc-0.8.1

[root@geosci mpc-0.8.1]# ./configure --prefix=/usr/local/mpc0.8.1/ --with-mpfr=/usr/local/mpfr2.4.2/ --with-gmp=/usr/local/gmp4.3.2/ &&make -j16 &&make install &&make check &&make clean

三、安装GCC-4.8.2

先下载该软件包,解压到相关目录之下。

[root@geosci gcc-4.8.2]# ./configure --prefix=/usr/local/gcc4.8.2/ --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++,fortran --with-gmp=/usr/local/gmp4.3.2/ --with-mpfr=/usr/local/mpfr2.4.2/ --with-mpc=/usr/local/mpc0.8.1/

vim ~/.bash_profile   加入如下一行

 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc-0.8.1/lib:/usr/local/gmp-4.3.2/lib:/usr/local/mpfr-2.4.2/lib

source .bash_profile

最好重新启动操作系统。在执行下面的命令。否则,可能出现令人惊慌的而无法理解的错误。

[root@geosci gcc-4.8.2]#make -j16                                 注:16可以为8、4、2,因为我的PC是8核的CPU。编译结束时,尾部信息如下:

...........................................................................................................................................................................................................................................................................................

os_r16.o _cos_c4.o _cos_c8.o _cos_c10.o _cos_c16.o _tan_r4.o _tan_r8.o _tan_r10.o _tan_r16.o _sinh_r4.o _sinh_r8.o _sinh_r10.o _sinh_r16.o _cosh_r4.o _cosh_r8.o _cosh_r10.o _cosh_r16.o _tanh_r4.o _tanh_r8.o
_tanh_r10.o _tanh_r16.o _conjg_c4.o _conjg_c8.o _conjg_c10.o _conjg_c16.o _aint_r4.o _aint_r8.o _aint_r10.o _aint_r16.o _anint_r4.o _anint_r8.o _anint_r10.o _anint_r16.o _sign_i4.o _sign_i8.o _sign_i16.o _sign_r4.o _sign_r8.o _sign_r10.o _sign_r16.o _dim_i4.o
_dim_i8.o _dim_i16.o _dim_r4.o _dim_r8.o _dim_r10.o _dim_r16.o _atan2_r4.o _atan2_r8.o _atan2_r10.o _atan2_r16.o _mod_i4.o _mod_i8.o _mod_i16.o _mod_r4.o _mod_r8.o _mod_r10.o _mod_r16.o misc_specifics.o dprod_r8.o f2c_specifics.o

libtool: link: ranlib .libs/libgfortran.a

libtool: link: ( cd ".libs" && rm -f "libgfortran.la" && ln -s "../libgfortran.la" "libgfortran.la" )

make[3]: Leaving directory `/studio/download/programcpptool/gcc-4.8.2/x86_64-unknown-linux-gnu/libgfortran'

make[2]: Leaving directory `/studio/download/programcpptool/gcc-4.8.2/x86_64-unknown-linux-gnu/libgfortran'

make[1]: Leaving directory `/studio/download/programcpptool/gcc-4.8.2'

[root@geosci gcc-4.8.2]# make install

...............................

libtool: install: chmod 644 /usr/local/gcc4.8.2/lib/../lib64/libatomic.a

libtool: install: ranlib /usr/local/gcc4.8.2/lib/../lib64/libatomic.a

libtool: finish: PATH="/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin:/sbin" ldconfig -n /usr/local/gcc4.8.2/lib/../lib64

ldconfig: /usr/local/gcc4.8.2/lib/../lib64/libstdc++.so.6.0.18-gdb.py is not an ELF file - it has the wrong magic bytes at the start.

----------------------------------------------------------------------

Libraries have been installed in:

   /usr/local/gcc4.8.2/lib/../lib64

If you ever happen to want to link against installed libraries

in a given directory, LIBDIR, you must either use libtool, and

specify the full pathname of the library, or use the `-LLIBDIR'

flag during linking and do at least one of the following:

   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable

     during execution

   - add LIBDIR to the `LD_RUN_PATH' environment variable

     during linking

   - use the `-Wl,-rpath -Wl,LIBDIR' linker flag

   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for

more information, such as the ld(1) and ld.so(8) manual pages.

----------------------------------------------------------------------

make[4]: Nothing to be done for `install-data-am'.

make[4]: Leaving directory `/studio/download/programcpptool/gcc-4.8.2/x86_64-unknown-linux-gnu/libatomic'

make[3]: Leaving directory `/studio/download/programcpptool/gcc-4.8.2/x86_64-unknown-linux-gnu/libatomic'

make[2]: Leaving directory `/studio/download/programcpptool/gcc-4.8.2/x86_64-unknown-linux-gnu/libatomic'

make[1]: Leaving directory `/studio/download/programcpptool/gcc-4.8.2'

 编译大约15分钟,就编译完毕了,编译时间的长短取决与你所用PC的配置的高低,以及你选用的参数:-j16/8/4/2的情况。

....................................

[root@geosci gcc-4.8.2]# make check

[root@geosci gcc-4.8.2]# make clean

[root@geosci bin]# pwd

[root@geosci bin]# ls -al

total 32556

drwxr-xr-x. 2 root root    4096 Dec  2 13:12 .

drwxr-xr-x. 8 root root    4096 Dec  2 13:12 ..

-rwxr-xr-x. 4 root root 3089042 Dec  2 13:12 c++

-rwxr-xr-x. 1 root root 3086022 Dec  2 13:12 cpp

-rwxr-xr-x. 4 root root 3089042 Dec  2 13:12 g++

-rwxr-xr-x. 3 root root 3079994 Dec  2 13:12 gcc

-rwxr-xr-x. 2 root root  131474 Dec  2 13:12 gcc-ar

-rwxr-xr-x. 2 root root  131386 Dec  2 13:12 gcc-nm

-rwxr-xr-x. 2 root root  131398 Dec  2 13:12 gcc-ranlib

-rwxr-xr-x. 1 root root 1630750 Dec  2 13:12 gcov

-rwxr-xr-x. 2 root root 3091414 Dec  2 13:12 gfortran

-rwxr-xr-x. 4 root root 3089042 Dec  2 13:12 x86_64-unknown-linux-gnu-c++

-rwxr-xr-x. 4 root root 3089042 Dec  2 13:12 x86_64-unknown-linux-gnu-g++

-rwxr-xr-x. 3 root root 3079994 Dec  2 13:12 x86_64-unknown-linux-gnu-gcc

-rwxr-xr-x. 3 root root 3079994 Dec  2 13:12 x86_64-unknown-linux-gnu-gcc-4.8.2

-rwxr-xr-x. 2 root root  131474 Dec  2 13:12 x86_64-unknown-linux-gnu-gcc-ar

-rwxr-xr-x. 2 root root  131386 Dec  2 13:12 x86_64-unknown-linux-gnu-gcc-nm

-rwxr-xr-x. 2 root root  131398 Dec  2 13:12 x86_64-unknown-linux-gnu-gcc-ranlib

-rwxr-xr-x. 2 root root 3091414 Dec  2 13:12 x86_64-unknown-linux-gnu-gfortran

这是编译后的各种编译器,我的PC上主要是C/C++/FORTRAN,够用了,基本上,因为我主要搞地球物理电磁法正反演,JAVA基本不用的,太新潮了,对于我们这个方向来说。

[root@geosci bin]# ls -al c++ g++ x86_64-unknown-linux-gnu-g++

-rwxr-xr-x. 4 root root 3089042 Dec  2 13:12 c++

-rwxr-xr-x. 4 root root 3089042 Dec  2 13:12 g++

-rwxr-xr-x. 4 root root 3089042 Dec  2 13:12 x86_64-unknown-linux-gnu-g++

这三个文件好像只有文件名不同,本质是一个。

[root@geosci bin]# diff c++ g++

[root@geosci bin]# diff  g++ x86_64-unknown-linux-gnu-g++

用diff命令证明了这一点。

[root@geosci bin]# pwd

/usr/bin

[root@geosci bin]# ls -al g++ c++ gcc cpp  gfortran ar nm ranlib gcov

-rwxr-xr-x. 1 root root  60976 Sep 20  2012 ar

-rwxr-xr-x. 4 root root 271368 Oct 19  2012 c++

-rwxr-xr-x. 1 root root 270504 Oct 19  2012 cpp

-rwxr-xr-x. 4 root root 271368 Oct 19  2012 g++

-rwxr-xr-x. 2 root root 268216 Oct 19  2012 gcc

-rwxr-xr-x. 1 root root  44128 Oct 19  2012 gcov

-rwxr-xr-x. 1 root root 283856 Oct 19  2012 gfortran

-rwxr-xr-x. 1 root root  44328 Sep 20  2012 nm

-rwxr-xr-x. 1 root root  60984 Sep 20  2012 ranlib

[root@geosci bin]# gcc -v

Using built-in specs.

Target: x86_64-redhat-linux

Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit
--disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode
--with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux

Thread model: posix

gcc version 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC)

[root@geosci bin]#

[root@geosci bin]# ln -s /usr/local/gcc4.8.2/bin/c++ c++;ln -s /usr/local/gcc4.8.2/bin/cpp cpp;ln -s /usr/local/gcc4.8.2/bin/g++ g++;ln -s /usr/local/gcc4.8.2/bin/gcc gcc;ln -s /usr/local/gcc4.8.2/bin/gcc-ar ar;ln -s /usr/local/gcc4.8.2/bin/gcc-ranlib ranlib;ln
-s /usr/local/gcc4.8.2/bin/gcov gcov;ln -s /usr/local/gcc4.8.2/bin/gfortran gfortran

[root@geosci bin]# ls -al g++ c++ gcc cpp  gfortran ar nm ranlib gcovls: cannot access nm: No such file or directory

lrwxrwxrwx. 1 root root 30 Dec  2 14:41 ar -> /usr/local/gcc4.8.2/bin/gcc-ar

lrwxrwxrwx. 1 root root 27 Dec  2 14:41 c++ -> /usr/local/gcc4.8.2/bin/c++

lrwxrwxrwx. 1 root root 27 Dec  2 14:41 cpp -> /usr/local/gcc4.8.2/bin/cpp

lrwxrwxrwx. 1 root root 27 Dec  2 14:41 g++ -> /usr/local/gcc4.8.2/bin/g++

lrwxrwxrwx. 1 root root 27 Dec  2 14:41 gcc -> /usr/local/gcc4.8.2/bin/gcc

lrwxrwxrwx. 1 root root 28 Dec  2 14:41 gcov -> /usr/local/gcc4.8.2/bin/gcov

lrwxrwxrwx. 1 root root 32 Dec  2 14:41 gfortran -> /usr/local/gcc4.8.2/bin/gfortran

lrwxrwxrwx. 1 root root 34 Dec  2 14:41 ranlib -> /usr/local/gcc4.8.2/bin/gcc-ranlib

[root@geosci bin]# pwd

/usr/bin

[root@geosci bin]# gcc -v

Using built-in specs.

COLLECT_GCC=gcc

COLLECT_LTO_WRAPPER=/usr/local/gcc4.8.2/libexec/gcc/x86_64-unknown-linux-gnu/4.8.2/lto-wrapper

Target: x86_64-unknown-linux-gnu

Configured with: ./configure --prefix=/usr/local/gcc4.8.2/ --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++,fortran --with-gmp=/usr/local/gmp4.3.2/ --with-mpfr=/usr/local/mpfr2.4.2/ --with-mpc=/usr/local/mpc0.8.1/

Thread model: posix

gcc version 4.8.2 (GCC)

[root@geosci bin]#
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息