Skip to main content

 路由器网 > 新闻资讯 >

linux学习之路之受到编译软件

2014-07-22 23:03 浏览:


我们知道在安装某一个软件时,有些我们不需要安装的程序或者特性被安装到系统上去了,而我们需要的程序或者特性没有被安装进去,或者说该软件存在一些漏洞等等因素,我们都需要修改该软件的源代码,然后在重新编译生产一个二进制文件,最后用户才可以安装这个二进制文件。

 

我们知道系统真正识别的文件其实只有二进制文件,而某个软件的原始码就是就是一段程序,而这类程序是供人看的,系统并不识别,因此为了让系统能够识别这段原始码的内容,必须要对原始码进行转换,转换成系统能够识别的二进制程序。而原始码转换成二进制文件需要借助编译器来完成。

所谓编译器就是将程序代码解析成系统能够识别的二进制程序。

 

所以我们可以这样来理解原始码、编译器、二进制程序的概念

原始码:就是我们常说的程序代码

编译器:将原始码转换成二进制文件

二进制文件:就是系统能够识别的程序

 

 

其中在大多linux distribution中使用最多的编译器就是gcc了。而在编译的过程中,我们可能会调用某一些已经存在的库文件,这些库文件可以来完成某些功能的。切记,函数库是不能自动执行的,只有被调用,这个库文件的内容才会发挥作用。并且函数库分为静态和动态函数库。

 

在整个编译的过程中包括如下步骤:

一、准备好开发环境或者编译环境

这其中的编译环境主要包括以下几点:

1、  是否有合适的编译器可以编译该软件的原始码,例如是否有gcc等编译器

2、  该软件所需要的函数库是否存在,以及该软件所依赖的其他软件

3、  该软件是否适合该操作系统

4、  内核的表头文件(header include)是否存在

如果该编译环境不符合的话,可能在安装过程中出现错误,以至于安装失败

 

二、安装"Development Tools""Development Libraries"

 

三、编译及安装

    其实使用gcc类似的编译器来编译程序过程比较复杂,除了每一个程序需要写上一段代码之外,还

    需要写上最终的链接程序。而我们使用make这个项目管理工具就可以简化整个编译过程。

 

        make的工作机制:make其实也是一只程序,当make执行时,make会在当前目录下搜索

        Makefile(或者makefile)这个文本文件,该文件记录了原始码如何被编译的详细信息。而makefile

    这个文件是由configure这个程序产生的。Configure这个程序主要是用来检测编译环境和在编译的过

    程中让用户选择编译特性的。如果检测不成功,那么安装也不会成功。在检测环境完成后,就会

    生产makefile文件。

 

    因此编译和安装又可以分为如下步骤:

1、  默认原始码文件为*.tar.gz的,所以需要使用tar命令来解压缩,解压缩后的文件放在/usr/local/src目录下

2、  使用cd命令切换到原始码所在的目录

3、  运行configure这个程序检测编译环境,产生makefile文件

在运行configure这个程序时,后面可以加上一些参数,这些参数可以改变某些编译特性。例如:

--help:显示所有的编译参数

--prefix=/path/to/somewhere:指定软件安装后的产生文件的位置

--conf-path=/path/to/somefile:指定软件的配置文件

--sysconfdir=/path/to/somewhere:指定配置文件的目录

              4、使用make命令根据makefile文件中的参数进行编译

              5、使用make install命令来安装

 

 

我们知道一个程序的组成一般包括:二进制程序,函数库、配置文件、帮助文件等

其中这个二进制程序如果要运行的话,必须使用全路径名称来运行,因为PATH变量中没有这个二进制文件路径。或者直接修改PATH变量,让其能够识别此程序的二进制文件路径。

修改PATH变量的方法有两种:

一、直接修改/etc/profile文件,修改PATH变量的值

二、/etc/profile.d目录下建立一个以.sh为名称后缀的文件,在这里添加一行

export PATH$PATH:/path/to/somefile

 

而库文件默认存放在/lib,/usr/lib目录下。要增添额外的搜索路径可以这么做:

/etc/id.so.conf.d/中创建以.conf为后缀的文件,而后把要增添的路径直接写在此文件中;

使用idconfig命令可以通知系统重新搜索库文件

       其中-v:显示重新搜索库文件的过程

 

头文件:输出给系统

       默认:/usr/include

       增添头文件搜寻路径,使用链接进行:

              /usr/local/tengine/include/   /usr/include/

              两种方式:

              ln -s /usr/local/tengine/include/* /usr/include/ 

              ln -s /usr/local/tengine/include  /usr/include/tengine

 

该软件产生的帮助文件默认存放在指定目录下的man目录下。为了可以使用man命令查询可以这样做:

1man -M /PATH/TO/MAN_DIR COMMAND

              2、在/etc/man.config中添加一条MANPATH