Linux中使用rpm格式的程序文件包来安装是比较方便的方法, 但是有一部分程序文件包没有rpm包格式, 这时就需要用户自己手工编译源码包来进行安装. 文本主要讲解源码编译的原理和基本操作过程.


源码包命名方式

name - VERSION . tar . gz

其中: VERSION = major . minor . release

major表示主版本号, 经过比较大的改进

minor表示次版本号, 改进比较小

release表示对一些bug进行修复


源码包编译过程

源码包是指经过程序员编写之后, 但没有经过编译的源代码, 源代码编译成可执行程序的简要编译过程如下图所示: 


Linux程序包管理--源码编译的原理和基本方法_程序包管理


# 上图中只是简要的说明了C语言源代码编译过程, 实际过程比上图所示的要复杂得多

处理过程: 源代码 --> 预处理 --> 编译 --> 汇编 --> 链接

其中: 预处理通过预处理器进行处理, 编译通过gcc编译器进行处理, 汇编通过汇编器进行处理, 链接通过链接器进行处理

文件格式处理过程: NAME.c文件 --> 多个NAME.o目标文件 --> NAME可执行文件


简化编译过程


Linux程序包管理--源码编译的原理和基本方法_程序包管理_02


普通用户在对源码包进行安装时, 需要安装以上开发软件并完成预处理,编译,汇编,链接过程才能实现对源码包进行编译.

为方便普通用户对源码的安装, 普通用户只需要安装必备的开发环境, 之后可以主要通过configure脚本文件和make命令来完成, 简化了源码包的编译安装过程.

其中configure脚本文件是程序员编写源码包时提供的, make命令是开发人员使用较多的工具.

a. configure脚本主要作用是通过检查用户的编译环境, 在根据用于指定的编译特性来生成Makefile文件;

b. make工具可以根据生成的Makefile文件中相关的文件名称, 进行编译生成二进制可执行程序文件, make工具的实质是对源码文件生成对应的目标文件, 再对多个目标文件并调用相关库函数生产1个二进制可执行程序文件;


源码包编译安装过程

1. 从可靠途径获取源码包文件, 并验证源码包的完整性;

2. 对源码包进行正确格式的解压缩展开;

3. 安装必备的基础软件: 开发环境和开发工具(此项非必须进行, 如果第一次进行编译安装就必须安装);

# 开发工具: Development tools, Server Plat form Development

4. 进入源码包目录内, 查看INSTALL或README文件内容, 主要是描述安装过程和基本注意事项;

5. 运行源码包目录下的运行./configure --help来查看configure的相关帮助说明, 在运行./configure脚本文件来创建Makefile文件, 可以指定安装位置和指定启用的特性;

6. 编译: 先执行make clean命令(非必须), 再执行make命令;

# make clean命令会读取生成的Makefile文件中关于Clean的工作: 清除当前系统上与此次安装重叠的目标文件

# make命令读取Makefile文件将源码文件编译生成目标文件, 再将其生成可执行文件, 可执行文件仅被存放在当前目录下而没有被执行

7. 使用make install命令来安装可执行程序文件至用户指定的目录中;

8. 对于安装到个人指定目录时, 对于一部分文件系统内核读取不到, 需要修改某些文件配置:

    a. 修改PATH环境变量: 创建配置文件: /etc/profile.d/SOFT.sh, 在其中添加: PATH=$PATH:SOFT的bin目录

    b. 新增lib库文件搜索路径: 创建配置文件: /etc/ld.so.conf.d/SOFT.conf, 在其中添加: SOFT的lib目录

    c. 新增h头文件的搜索路径: 创建目录符号链接文件: ln -s /usr/local/SOFT/include/ /usr/include/SOFT

    d. 新增man文件搜索路径: 在配置文件/etc/man.config中添加路径:  MANPATH SOFT的man目录

    

安装建议:

a. 软件安装在 /usr/local 目录下

b. 源码包安装在 /usr/local/src 目录下

c. 软件的配置文件etc, 库函数lib, 可执行文件bin, 帮助文档统一放在一个目录下 /usr/local/SOFT/{etc,lib,bin,man}

# 因为源码包安装时没有通过rpm程序包管理器, 源码包的安装信息没有被记录在rpm数据库中, 安装和卸载软件时都需要记录大量安装信息, 将源码包统一安装在单个目录时安装和卸载都不用记录大量信息


以上就是源码包编译安装过程和基本操作过程.


本人水平有限, 如有理解不当的地方, 请大家给予指正, 非常感谢!