源码编译安装软件

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

 

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

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

 

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

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

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

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

 

编译流程图 

将原始码编译成二进制文件的流程图为:

wKioL1POWhjzqcU5AABf_a6VDYk794.jpg

其中在大多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(这个表示的是二进制文件所在的目录)

文件创建完成之后,在执行source  /etc/profile.d/*.sh这个文件即可。

 

导入该程序的库文件到系统,以方便其他程序使用

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

/etc/ld.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