GCC安装

来源:互联网 发布:京东的域名花了多少钱 编辑:程序博客网 时间:2024/06/11 14:17

一、GCC的作用和运行机制

    GCC是Linux下重要的编译工具,用法这里就不说了,满大街都找得到。这里我重点介绍GCC的运作机制,作为代码分析的铺垫。全篇使用C语言子部件来作分析,因为我对其他语言的编译没有研究。

    根据编译原理,语言的编译分为这么几个步骤:词法分析、语法分析、语义分析、中间语言生成、优化、目标代码生成等。然而从编译器使用的角度来看,要把源代码翻译为可执行文件要经过编译和连接两步,与此对应,一个完整的编译系统一定包含编译器和连接器两大功能部件。编译器要完成编译原理中提到的那些任务;连接器要把编译器生成的代码片段拼接成一个完整的可执行程序。之所以需要连接器,是因为一般的程序都是多源文件的,而编译器一次只编译一个源文件(称之为翻译单元translation unit),因此需要连接器把所有翻译单元对应的输出合并成一个可执行文件。

    如果一切顺利,可执行程序就可以正确的生成出来。但是一旦源代码存在某些问题,错误就会被报告出来。编译器报告的错误一般都是局部错误,它会指明错误在哪个文件第几行;连接器报告的错误一般都是全局错误,而且绝大多数都是多胳膊少腿的问题,比如函数重定义,无法解决的外部符号等,这些错误无法定位到某一行。

    GCC就是这里的编译器。并且GCC的生成结果并不是一般人所认为的对象文件(.o),而是文本格式的汇编代码!将汇编代码转换为二进制指令的工作由AS完成,生成大家都很熟悉的对象文件(.o);生成的这些对象文件再由AR程序打包成静态库(.a),或者由LD程序连接成可执行程序(elf、.so或其他格式)。而LD就是所谓的连接器。AS、AR、LD是属于另外一个叫做binutils的软件包的程序,所以要让GCC能够有效运作起来,除了在系统中安装GCC外,还要安装binutils才行。

以下是gcc、as、ld各司其责的配合完成一个编译过程。

[plain] view plaincopyprint?
  1. gcc test.c -S -o test.S  
  2. as test.S -o test.o  
  3. ld test.o -o test  
    通常所用的“gcc -c”就相当于“gcc -S” + as,而对于编译单个源文件一步到位生成可执行“gcc test.c -o test”相当于上面三个步骤的组合,中间文件被放置在临时目录下。从这一点看来,GCC除去编译的功能外,更像是个driver,它可以驱动as和ld完成整个的编译,特别是gcc也接受对象文件(.o)和静态库(.a)作为参数用于生成可执行程序,其实背后就是调用的LD,还可以用“-Wl,”选项给LD传递自定义参数。所以在大多数软件的Makefile里,你很难找到AS和LD的字眼,gcc已经给你包办了。

二、GCC的安装

    要学习和修改GCC源码,首先第一步是在自己的机器上用GCC源代码编译出一个选定版本的GCC(这里以gcc-4.5.2.tar.bz2为例,源码可以从http://gcc.gnu.org去下载)。除此之外,GCC依赖于gmp、mpfr、mpc三个库,如果你机器上没有,或者版本太老以至于无法支持新的GCC,那么你还得去把这三个库下载下来。

一般来说,下载GCC是从GNU的FTP镜像网站去下载,gcc的代码包一般放置在/release/gcc-x.y目录下,而那三个依赖库一般放置在/infrastructure/目录下。

1、把依赖库和GCC解包

[plain] view plaincopyprint?
  1. tar -vjxf gmp-4.3.2.tar.bz2 -C /usr/src/  
  2. tar -vjxf mpfr-2.4.2.tar.bz2 -C /usr/src/  
  3. tar -vxf mpc-0.8.1.tar.gz -C /usr/src/  
  4. tar -vjxf gcc-4.5.2.tar.bz2 -C /usr/src/  

2、到自己的home目录下编译依赖库

[plain] view plaincopyprint?
  1. cd ~  
  2. mkdir gmp-build  
  3. cd gmp-build  
  4. /usr/src/gmp-4.3.2/configure --prefix=/usr/local/gmp-4.3.2 #指定安装位置  
  5. make  
  6. make check  
  7. make install  
  8.   
  9. cd ~  
  10. mkdir mpfr-build  
  11. cd mpfr-build  
  12. /usr/src/mpfr-2.4.2/configure --prefix=/usr/local/mpfr-2.4.2 --with-gmp=/usr/local/gmp-4.3.2  
  13. make  
  14. make check  
  15. make install  
  16.   
  17.   
  18. cd ~  
  19. mkdir mpc-build  
  20. cd mpfr-build  
  21. /usr/src/mpc-0.8.1/configure --prefix=/usr/local/mpc-0.8.1 --with-mpfr=/usr/local/mpfr-2.4.2 --with-gmp=/usr/local/gmp-4.3.2  
  22. make  
  23. make check  
  24. make install  

3、编译GCC

[plain] view plaincopyprint?
  1. cd ~  
  2. mkdir gcc-build  
  3. cd gcc-build  
  4. /usr/src/gcc-4.5.2/configure --prefix=/usr/local/gcc-4.5.2 --with-mpc=/usr/local/mpc-0.8.1 --with-mpfr=/usr/local/mpfr-2.4.2 --with-gmp=/usr/local/gmp-4.3.2 --enable-languages=c,c++  
  5. make  
  6. make install  


    漫长等待过后GCC就被安装到/usr/local/gcc-4.5.2目录下了,然后ln -s /usr/local/gcc-4.5.2/bin/gcc /usr/local/bin/gcc,最后gcc -v看看,版本号是不是换了?

转自:http://blog.csdn.net/sonicling/article/details/6702031

参考:http://www.linuxdiyf.com/viewarticle.php?id=91486

           http://linux5588.blog.51cto.com/65280/794251

           http://hi.baidu.com/lgh_boffin/blog/item/d4d95def8f3e4132acafd5d5.html

           http://hi.baidu.com/sakurac/blog/item/d9f5f58f5b51cfedf01f3650.html

           http://gcc.gnu.org/onlinedocs/gccint/

资源下载地址:ftp://gcc.gnu.org/pub/gcc/infrastructure/