编译gcc 4.6.3。主要是因为我系统自带的gcc太老了。tr1的array和shared_ptr都没有,于是重新安装一个
Note: This doc is suitable for new version, for example 4.9.3, 5.1.0, etc. But need to check the x64 system attribution, if yes, read thru all of the doc to get the x64 operation.
Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+
http://www.multiprecision.org/mpc下载mpc-1.0.tar.gz ftp://ftp.gnu.org/gnu/gmp/gmp-5.0.1.tar.bz2下载gmp-5.0.1.tar.bz2 http://ftp.gnu.org/gnu/mpfr/" target="_blank">http://ftp.gnu.org/gnu/mpfr/下载mpfr-3.1.0.tar.xz。
我上面说的下载都是最新的文件了,其实还有简单的办法就是下载符合需要的mpc、gmp以及mpfr文件,直接在下载gcc的mirror里面,选择infrastructure,里面就有需要的一些基础文件了,如下图:
先开始安装GMP。解压GMP的压缩包后,得到源代码目录gmp-5.0.1。在该目录的同级目录下建立一个临时的编译目录,这里命名为temp。然后开始配置安装选项,进入temp目录,输入以下命令进行配置:
../gmp-5.0.1/configure --prefix=/usr/local/gmp-5.0.1 make make install
mpfr和mpc的安装方法与gmp类似。
不过要注意配置的时候要把gmp与mpfr的依赖关系选项加进去,具体配置命令如下:
../mpfr-3.1.0/configure --prefix=/usr/local/mpfr-3.1.0 --with-gmp=/usr/local/gmp-5.0.1 ../mpc-1.0/configure --prefix=/usr/local/mpc-1.0 --with-gmp=/usr/local/gmp-5.0.1 --with-mpfr=/usr/local/mpfr-3.1.0
安装好这三个库之后,就可以正式开始安装gcc了。
当然了链接的时候,需要刚刚编译的3个lib,所以我们需要设定查找路径了:
到路径/etc/ld.so.conf.d下面创建一个文件:
gcc-463.conf
内容如下:
/usr/local/gmp-5.0.1/lib /usr/local/mpfr-3.1.0/lib /usr/local/mpc-1.0/lib
把刚才的lib包进来即可:
[root@localhost ld.so.conf.d]# ldconfig
创建文件夹,/gcc, 下载gcc-4.6.3然后创建文件夹gcc463作为temp编译路径:
[root@localhost gcc]# dir gcc463 gcc-4.6.3 gcc-4.6.3.tar.bz2 [root@localhost gcc]# cd gcc463/ [root@localhost gcc463]# [root@localhost gcc463]# /gcc/gcc-4.6.3/configure --prefix=/usr/local/gcc463 --with-gmp=/usr/local/gmp-5.0.1 --with-mpfr=/usr/local/mpfr-3.1.0 --with-mpc=/usr/local/mpc-1.0 --enable-threads=posix --enable-lto --enable-languages=c,c++
然后编译:
make make check(可选) make install
然后在/usr/bin里面设置gcc和g++的链接就是了。
注:如果是64位的系统编译默认只编译64位的,需要带configure的参数:--with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --disable-multilib
最后,还有一步需要处理,就是系统自带的libstdc++的库文件太底版本了:
[root@localhost c_proj]# strings /usr/lib/libstdc++.so.6 | grep GLIBC GLIBCXX_3.4 GLIBCXX_3.4.1 GLIBCXX_3.4.2 GLIBCXX_3.4.3 GLIBCXX_3.4.4 GLIBCXX_3.4.5 GLIBCXX_3.4.6 GLIBCXX_3.4.7 GLIBCXX_3.4.8 GLIBC_2.3 GLIBC_2.0 GLIBC_2.3.2 GLIBC_2.4 GLIBC_2.1 GLIBC_2.1.3 GLIBC_2.2 GLIBCXX_FORCE_NEW [root@localhost c_proj]#
但是我们编译的g++编译器已经超出很多了,于是,由于我们编译gcc的目标路径,不在系统路径下面,所以添加到系统路径里面:
[root@localhost lib]# cd /etc/ld.so.conf.d/ [root@localhost ld.so.conf.d]# vim gcc-463.conf
1 /usr/local/gmp-5.0.1/lib 2 /usr/local/mpfr-3.1.0/lib 3 /usr/local/mpc-1.0/lib 4 /usr/local/gcc463/lib执行:
[root@localhost ld.so.conf.d]# ldconfig
附新的so文件的属性:
[root@localhost gcc463]# strings /usr/local/gcc463/lib/libstdc++.so.6 | grep GLIBC GLIBCXX_3.4 GLIBCXX_3.4.1 GLIBCXX_3.4.2 GLIBCXX_3.4.3 GLIBCXX_3.4.4 GLIBCXX_3.4.5 GLIBCXX_3.4.6 GLIBCXX_3.4.7 GLIBCXX_3.4.8 GLIBCXX_3.4.9 GLIBCXX_3.4.10 GLIBCXX_3.4.11 GLIBCXX_3.4.12 GLIBCXX_3.4.13 GLIBCXX_3.4.14 GLIBCXX_3.4.15 GLIBCXX_3.4.16 GLIBC_2.0 GLIBC_2.3 GLIBC_2.1 GLIBC_2.1.3 GLIBC_2.3.2 GLIBC_2.2 GLIBCXX_FORCE_NEW GLIBCXX_DEBUG_MESSAGE_LENGTH [root@localhost gcc463]#