Linux(centos5.5)部分安装说明 (不过这个版本,个人查了没有std=c++0x和std=gnu++0x 选项(在安装unodered_map和unodered_set的时候需要),后续重安装 4.7.2的看看)
说明:安装主要包括,gcc4.6.3、cmake2.8.4、boost1.53.0
Gcc安装
需要包: gmp-4.3.2.tar.gz, mpfr-2.4.2.tar.bz2, mpc-1.0.1.tar.gz和gcc-4.6.3.tar.bz2
错误一
编译gcc
#tar -xvf gcc-4.6.3.tar.bz2
#cd gcc-4.6.3
#./configure
出错:
gcc configure: error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+
说明要安装gcc需要GMP、MPFR、MPC这三个库,于是又从网上下了三个库的压缩包。由于MPFR依赖GMP,而MPC依赖GMP和MPFR,所以要先安装GMP,其次MPFR,最后才是MPC。
安装GMP
解压 #tar -xvf gmp-4.3.2.tar.bz2
#cd gmp-4.3.2
#./configure --prefix=/usr/local/gmp
#make
#make install
这样就安装好了gmp.mpfr和mpc的安装方法与此类似。不过要注意配置的时候要把依赖关系选项加进去,具体后面两个库配置命令如下:
安装MPFR
解压 #tar -xvf mpfr-2.4.2.tar.bz2
#cd mpfr-2.4.2
#./configure --prefix=/usr/local/mpfr --with-gmp=/usr/local/gmp
#make
#make install
安装MPC
解压 #tar -xvf mpc-1.0.1.tar.gz
#cd mpc-1.0.1
#./configure --prefix=/usr/local/mpc ---with-gmp=/usr/local/gmp --with-mpfr=/usr/local/mpfr
#make
#make install
安装好这三个库之后,就可以正式开始安装gcc了。
错误二
#cd gcc-4.6.3
#./configure --prefix=/usr/local/gcc -enable-threads=posix -disable-checking -disable-multilib -enable-languages=c,c++ -with-gmp=/usr/local/gmp -with-mpfr=/usr/local/mpfr -with-mpc=/usr/local/mpc
#make
gcc的配置选项有很多,具体可以参考gcc源文件目录下的安装说明。这里只安装了c和c++的编译器。然后开始make编译。本来以为就可以大功告成了,结果在编译途中又出现了错误:
“checking for suffix of object files... configure: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.
解决办法:
需要添加环境变量LD_LIBRARY_PATH以指出前面三个库的位置,键入以下命令:
#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc/lib/:/usr/local/gmp/lib/:/usr/local/mpfr/lib/
//这里我手动export 才行
安装gcc
#make
#make check
#make install
至此gcc就全部安装完成了。
创建软链接
不过目前还不能使用新版本的gcc,因为新版的可执行文件还没加到命令的搜索路径中。在这里我为新版的gcc和g++命令分别建立了一个软链接。进入/usr/bin目录后,键入如下命令建立软链接。
# ln -s /usr/local/gcc/bin/gcc /usr/bin/gcc
# ln -s /usr/local/gcc/bin/g++ /usr/bin/g++
配置新软件的环境变量
在正式使用之前还有最后一个工作要做,就是将前面安装的三个库的路径加进环境变量LD_LIBRARY_PATH中,不然在编译程序的时候会出错。
需要编辑/etc目录下的.bashrc文件配置shell环境。
添加以下语句:
#vi /etc/.bashrc
添加到最后一行
LD_LIBRARY_PATH=:/usr/local/mpc/lib:/usr/local/gmp/lib:/usr/local/mpfr/lib:/usr/local/gcc/lib
export LD_LIBRARY_PATH
保存重启系统后,就可以使用新装的gcc了,然后用
#gcc -v 查看版本,gcc 版本 4.6.3 (GCC)
g++查看同上,gcc4.6.3安装成功
注意,这里可能需要执行“cmake安装”步骤中的“错误一”。
部分安装参考
1、下载安装的源码:
如下需要下载以下包:gcc-4.6.1.tar.bz2 gmp-4.3.2.tar.bz2 mpc-0.8.1.tar.gz mpfr-2.4.2.tar.bz2
下载地址如下:
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/{gmp-4.3.2.tar.bz2,mpc-0.8.1.tar.gz,mpfr-2.4.2.tar.bz2}
wget 即可!
2、解压安装:安装有先后顺序:GMP、MPFR、MPC、GCC
安装GMP: tar jxf gmp-4.3.2.tar.bz2 &&cd gmp-4.3.2/ ;./configure –prefix=/usr/local/gmp/ &&make &&make install
安装MPFR:
cd ../ ;tar jxf mpfr-2.4.2.tar.bz2 ;cd mpfr-2.4.2/ ;./configure –prefix=/usr/local/mpfr –with-gmp=/usr/local/gmp &&make &&make install
安装MPC:
cd ../ ;tar xzf mpc-0.8.1.tar.gz ;cd mpc-0.8.1 ;./configure –prefix=/usr/local/mpc –with-mpfr=/usr/local/mpfr –with-gmp=/usr/local/gmp &&make &&make install
安装GCC:
cd ../ ;tar jxf gcc-4.6.1.tar.bz2 ;cd gcc-4.6.1 ;./configure –prefix=/usr/local/gcc –enable-threads=posix –disable-checking –disable-multilib –enable-languages=c,c++ –with-gmp=/usr/local/gmp –with-mpfr=/usr/local/mpfr/ –with-mpc=/usr/local/mpc/ &&make &&make install
然后执行如下:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc/lib:/usr/local/gmp/lib:/usr/local/mpfr/lib/
//这一步很关键,设置变量,不设置后面会报错。
make && make install
安装完毕即可!然后做一个链接就可以使用GCC了
mkdir -p /data/backup/`date +%Y%m%d`
mv /usr/bin/{gcc,g++} /data/backup/`date +%Y%m%d`
新建软链接:
ln -s /usr/local/gcc/bin/gcc /usr/bin/gcc
ln -s /usr/local/gcc/bin/g++ /usr/bin/g++
cmake安装
需要库:cmake-2.8.4.tar.gz
也可以参考:wget
错误一
#tar xvf cmake-2.8.8.tar.gz
#./bootstrap
#make
#make install
错误:./a.out: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./a.out)
shaochangqing@shaocq-notebook:~/study$ strings /usr/lib/libstdc++.so.6 | grep GLIBC
解决办法:
查看版本strings /usr/lib/libstdc++.so.6 | grep GLIBC 没有找到对应文件
解决问题:
一、将/usr/local/gcc-4.7/lib64中的libstdc++.so.6.0.17拷贝到/usr/lib
#cp /usr/local/gcc/lib64/libstdc++.so.6.0.16 /usr/lib/
二、并建立链接:
#ln -sf /usr/lib/libstdc++.so.6.0.17 /usr/lib/libstdc++.so.6
检查:
strings /usr/lib/libstdc++.so.6 | grep GLIBC
安装cmake
#make
#make install
Boost 安装
需要库:bzip2-1.0.6.tar.gz、icu4c-4_6_1-src.tgz、Python-3.2.3.tar.bz2、zlib-1.2.7.tar.gz和boost_1_53_0.tar.bz2
安装python
参考下载源代码
# tar xvf Python-3.2.3.tar.bz2
#cd Python-3.2.3
# ./configure
#make
# make install
错误一
在suse10或rhel5(es5)下系统默认已经装了python但版本是2.4.x;本次安装后在shell中输入
#python
会发现显示结果:
Python 2.4.3 (#1, Dec 11 2006, 11:38:52)
[GCC 4.1.1 20061130 (Red Hat 4.1.1-43)] on linux2
Type “help”, “copyright”, “credits” or “license” for more information.
>>>
版本还是2.4.x的
解决办法:
#cd /usr/bin
#ll |grep python //查看该目录下python
#rm -rf python
#ln -s PREFIX/Python-3.2.3/python ./python //PREFIX为你解压python的目录
#python //再次检查,正确了
说明python安装成功。按ctrl+d键可退出python命令行
注意这里需要执行“安装bzlib”的“错误三”步骤,否则其他安装不通过
安装zlib
参考网址:wget
# tar xvf zlib-1.2.7.tar.gz
#cd zlib-1.2.7
# ./configure
#make
# make install
安装bzlib
参考网址:wget
#tar xvf bzip2-1.0.6.tar.gz
#cd bzip2-1.0.6
//错误安装(以下先不要这样,否则重新解压)
#make
#make install
错误二
安装boost 会出现错误:
错误:缺少zlib.h这个文件
//******************************************************************************************************************************//
/usr/bin/ld: /usr/local/lib/libbz2.a(bzlib.o): relocation R_X86_64_32S against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libbz2.a: could not read symbols: Bad value
collect2: ld 返回 1
make: *** [libtokyocabinet.so.8.22.0] 错误 1
解决办法:
安装前(重新解压)
#tar xvf bzip2-1.0.6.tar.gz
#cd bzip2-1.0.6
1、删除以前库
如果发现 libbz2.a: could not read symbols: Bad value
就应该把/usr/local/lib中的libbz2.a删掉
#rm –rf /usr/local/lib/libbz2.a
2.修改bzip2-1.0.4的Makefile文件
#vim Makefile
CC=gcc -fPIC
AR=ar
RANLIB=ranlib
LDFLAGS=
BIGFILES=-D_FILE_OFFSET_BITS=64
CFLAGS=-fPIC -Wall -Winline -O2 -g $(BIGFILES)
//从这里开始
同样,bzip2有一个Makefile-libbz2_so的文件,编译时会调用,当然你也可以单个编译:
#make -f Makefile-libbz2_so
#make clean
#make
#make install
安装icu
#tar xvf icu4c-4_6_1-src.tgz
#cd icu/soruce
#./configure
#make
#make install
安装boost
./booststarp.sh //这里的一些错误不用管
./b2 –a //全部安装(开始一堆错误,看各个的错误就知道了)
./b2 install
错误三
找不到“python.h”文件。
解决办法:
查看./b2 –a 打应出的python目录,明显找不到路径;而在/usr/local/include/python3.2m路径下有“python.h”头文件。这样,我把它复制以下就行了。
#cp -rp /usr/local/include/python3.2m/ /usr/local/include/python3.2
其实这里还有N多错误,但如果上面的“错误N”步骤都解决了,那么下面就没有问题了
./b2 –a //全部安装
./b2 install
Boost环境
设置环境变量
在/etc/profile.d新建可执行文件boost.sh,添加文件内容:
#vim /etc/profile.d
#!/bin/sh
BOOST_INCLUDE=/usr/local/include/boost
BOOST_LIB==/usr/local/lib
export BOOST_INCLUDE BOOST_LIB
命令行执行:
#source /etc/profile.d/boost.sh
以后在编译程序时,
只需要用:-I$BOOST_INCLUDE -L$BOOST_LIB 即可,还要使用-l指定了链接库。
余下环境:(下面可能不用搞,默认会指定路径)
/etc/ld.so.conf // 文件添加so库的环境变量/home/boost-1.48.0/sdk/lib(主要关键问题)
#vi /etc/ld.so.conf
最后一行添加
/usr/local/lib
修改完成后,通过ldconfig命令进行重启
#ldconfig
作者:向容成
2013-04-02