Linux下安装gcc

GCC(GNU Compiler Collection)是GNU的编译器套装,有C,C++,Objective-C,Fortran,Java,Ada和Go。

我们可以根据自己项目的需要选择其中的编译器进行安装。

下面我就以GCC-4.8.1为例介绍GCC的安装以及在安装中遇到的问题和相应的解决办法。

官方网站:http://gcc.gnu.org/

1)下载

GCC官网右边的sidebar有Download。其中有mirror sites,可以选择就近的站点下载gcc-4.8.1.tar.gz或gcc-4.8.1.tar.bz2和md5.sum。


2)检查文档完整性

使用md5sum工具检查gcc-4.8.1.tar.gz或gcc-4.8.1.tar.bz2是否完整:

md5sum -c md5.sum

这个命令要求 gcc-4.8.1. tar.gz或gcc-4.8.1. tar.bz2和md5.sum在同一目录下。
如果文档完整,可以得到如下信息:
gcc-4.8.1.tar.bz2: OK
gcc-4.8.1.tar.gz: OK

3)解压文档
tar jxvf gcc-4.8.1.tar.bz2 -C /usr/local/src
tar zxvf gcc-4.8.1.tar.gz -C /usr/local/src

这时在/usr/local/src下生成了gcc-4.8.1目录。
GCC建议srcdir(源文件目录),objdir(目标文件目录),instdir(安装文件目录,包括bin,lib,include等)各不相同。
因此我的srcdir为/usr/local/src,objdir为/usr/local/src/gcc481build,instdir为/usr/local/gcc-4.8.1。
/usr/local/src/INSTALL中有详细的安装说明,index.html为入口。
4)配置gcc编译环境
这一步极易出现错误信息,尤其当你的系统缺少必备的函数库和编译器(什么?我不是在安装编译器吗???但是由于我们采用的是源代码安装方式,gcc需要gcc或cc进行编译的)。
mkdir -pv /usr/local/sr/gcc481build
mkdir -pv /usr/local/gcc-4.8.1
cd /usr/local/src/gcc481build
/usr/local/src/gcc-4.8.1/configure --prefix=/usr/local/gcc-4.8.1 --enable-threads=posix --disable-checking --enable-languages=c,c++

这里可以用
/usr/local/src/gcc-4.8.1/configure --help

或者查看srcdir/INSTALL/configure.html来查阅各选项功能。
这里--prefix指定instdir,--enable-threads=posix指定支持的多线程库(对C++的exception处理有影响),--disable-checking可以缩短make的时间,--enable-languages=c,c++指定只装c和c++。
通过下面命令可以查看gcc支持的语言:
grep language= gcc/*/config-lang.in

以gcc-4.8.1为例,得到如下信息:
gcc/ada/config-lang.in:language="ada"
gcc/c/config-lang.in:language="c"
gcc/cp/config-lang.in:language="c++"
gcc/fortran/config-lang.in:language="fortran"
gcc/go/config-lang.in:language="go"
gcc/java/config-lang.in:language="java"
gcc/lto/config-lang.in:language="lto"
gcc/lto/config-lang.in:boot_language=$enable_lto
gcc/objc/config-lang.in:language="objc"
gcc/objcp/config-lang.in:language="obj-c++"

在配置阶段,可能遇到下面的错误信息:
configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.</pre><br>  

不要紧,这说明你的系统没有安装GCC需要的数值函数库。

GMP(The GNU Multiple Precision Arithmetic Library)是任意精度算术库。
可以从http://gmplib.org/下载gmp-5.1.2.tar.lz和gmp-5.1.2.tar.lz.sig。

MPFR(Multiple-Precision Floating-Point)是一个带正确近似的多精度浮点计算C库。依赖GMP。
可以从http://www.mpfr.org/下载mpfr-3.1.2.tar.xz和mpfr-3.1.2.tar.xz.asc。

MPC是多精度复数库。依赖GMP和MPFR。
可以从http://www.multiprecision.org/下载mpc-1.0.1.tar.gz和mpc-1.0.1.tar.gz.sig。

安装上述三个函数库时方法相似,仅需注意依赖关系。

下面以GMP为例:
首先检查完整性:
gpg --verify gmp-5.1.2.tar.lz.sig
gpg --recv-keys 28C67298
gpg --verify --verbose gmp-5.1.2.tar.lz.sig

然后解压到指定目录:
tar --lzip -xvf gmp-5.1.2.tar.lz -C /usr/local/src

其余两个用J(xz过滤器)和z(gzip过滤器)代替--lzip。
其次配置并编译库:
mkdir /usr/local/src/gmp_build/
mkdir /usr/local/lib/gmp-5.1.2/
cd /usr/local/src/gmp_build/
/usr/local/src/gmp-5.1.2/configure --prefix=/usr/local/lib/gmp-5.1.2/
make
make check
make install
make clean

其余相似,但是要注意configure选项依次多--with-gmp=/usr/local/lib/gmp-5.1.2/和--with-mpfr=/usr/local/lib/mpfr-3.1.2/

GCC用下面的configure选项:
/usr/local/src/gcc-4.8.1/configure --prefix=/usr/local/gcc-4.8.1 --enable-threads=posix --disable-checking --enable-languages=c,c++ --with-gmp=/usr/local/lib/gmp-5.1.2 --with-mpfr=/usr/local/lib/mpfr-3.1.2 --with-mpc=/usr/local/lib/mpc-1.0.1

5)编译
make -j4
make install

-j4表示使用4个CPU。
在make过程中如果遇到:
Checking for suffix of object files... configure: error: in `/usr/local/src/gcc-4.8.1/i686-pc-linux-gnu/libgcc':  
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/lib/gmp-5.1.2/lib:/usr/local/lib/mpfr-3.1.2/lib:/usr/local/lib/mpc-1.0.1/lib


6)链接
cd /usr/bin
ln -s /usr/local/gcc-4.8.1/bin/gcc gcc481
ln -s /usr/local/gcc-4.8.1/bin/g++ g++481

在/etc/profile中加入

LD_LIBRARY_PATH=/usr/local/gcc-4.8.1/lib:/usr/local/lib/gmp-5.1.2/lib:/usr/local/lib/mpfr-3.1.2/lib:/usr/local/lib/mpc-1.0.1/lib
export LD_LIBRARY_PATH

以防使用GCC编译时出错。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值