Chinaunix首页 | 论坛 | 博客
  • 博客访问: 397107
  • 博文数量: 29
  • 博客积分: 2091
  • 博客等级: 大尉
  • 技术积分: 463
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-05 10:53
文章分类
文章存档

2012年(2)

2011年(6)

2010年(12)

2009年(9)

我的朋友

分类: LINUX

2011-04-29 10:10:24

                                    Linux下的共享软件的编译

 

Linux下软件的编译通常都是使用GCC这个工具的。GCC是一个开放源代码的GPL协议的共享软件。GCC是一个工具软件包。包含多个与编译相关的工具软件,其中,核心的是GCCG++两个工具软件。它们之间的区别是GCC是编译C语言软件的,G++则可编译C++软件。当用G++编译C语言的软件时,它会自动调用GCC来完成对C语言的编译,而用GCC编译C++软件时,则不会自动调用G++,而会报错。这两个工具可直接生成可执行文件,但大多数时候只是生成一些代码片段,需要使用一个工具link,它的作用是把编译生成的一些代码片段连接起来而最终生成一个可执行文件。GCC工具包中,还有两个常用的工具,stripreadelfStrip工具是把编译生成的可执行文件中的调试信息去除,而对可执行文件大幅瘦身。Readelf工具则用来读取可执行文件的一些相关信息,如此可执行文件是静态编译还是动态编译的,是动态编译的话,需要依赖哪些动态链接库。作为初学者可先不用理会这两个工具的使用,但一定要先了解一下GCCG++两个工具的使用。记住,只需了解就可以,在以后的开发工程中,大多数时候是不会需要自已去调用这两个工具软件的。

当你了解了这两个工具后,你就会发现那真接用这两个工具软件去编译软件的话,是一个十分痛苦的工作,它要输入一长串的参数才能完成,当你的项目十分复杂时,它根本就是一个不可能完成的任务。于是,有人编写了这样一个软件,gnumake,或者就叫make。这个软件的作用是根据一些预先编写好的规则,自动去调用GCC,G++,Link,并根据规则自动加上一些参数以完成编译。而这个规则用一个文件来描述,文件名就叫makefile

到这里,你应该可以知道,要想顺利编译软件,必须要编译一个名叫makefile的文件。这样,你就应该去了解makefile如何编写。接下来,你就会发现,原来makefile的编写也不是一件轻松的事。于是,又有人写了一个工具软件,automake,它可以根据一些规则自动生成makefile文件。同样的,这些规则的编写也是件麻烦事,于是,又有人编写了一个工具软件,autoconf。它也根据一些规则生成automake需要的规则文件。它所需要的规则也不用自已编写,可以用autoscan来生成。幸运的是autoscan不需要什么规则来生成autoconf需要的规则文件。但是它生成的规则文件,还要自已去修改,才能给autoconf使用(这个规则文件,共享软件的作者通常都写好了)。

上述这几个工具已经成为linux开发必须的工具,因此,共享软件的作者就针对这几个工具软件,写了一个脚本文件,你只要运行这个脚本文件,它就会自动调用上述的这些工具软件链,而最终生成makefile文件。然后,你只需输入make,即可完成编译。这个脚本文件可以叫任何名字,但大多数软件作者都把它起名作configure。这个脚本文件有时需要一些参数,比如指定一下当前是否是要交叉编译,是要进行静态编译还是要进行动态编译等等。参数的输入方法当然可以有多种多样,但大多数都遵守一些常用的参数形式。如CC=arm-linux-gcc CPP=arm-linux-g++等类似的形式。

到此,你应该已经了解到,要编译那些共享软件,通常只需输入configuremake即可完成编译任务。有时共享软件可以配置成是否交叉编译,编译其中的哪些功能等等,这时,就需要在configure时输入一些参数。输入参数的方法可以是直接在configure后加上一些参数,也可以用设置环境变量的方法去设置这些参数。不同的软件,参数有多有少,也不尽相同。比较极致的是QT4开发库的编译,configure时,需要输入一长串的参数。

看完本篇,你应该对软件的编译有了一个了解,关于具体的操作,我不想多写了,网上相关文章数不胜数。在了解了这些后,那些文章再看起来就不会象天书了。

阅读(2353) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~