编译安装详解

1. 编译安装概述

前面两篇关于程序包管理器的文章谈到,无论是使用rpm命令还是yum命令安装的都是已编译好的程序包,在整个安装过程中用户只需执行一条命令即可完成安装。这样带来的好处是方便,但因为是安装的是已编译好的包,所以用户的系统平台环境必须与rpm包制作者的系统平台环境相同。此外,如果用户要安装使用某程序上的某个功能,而rpm包制作者在编译过程中默认没有指定该功能的实现,这时候该怎么办呢?更何况如果某程序只是提供源码而没有现成的rpm包。这时就需要用户手动编译安装了,而编译安装就是将程序源代码编译成完全适合自己平台类型的程序包。

因此,用户首先得获得程序源码包(SRPM, Source RPM)。RPM包的命名格式为:name-VERSION-release.arch.rpm,而程序源码包(SRPM)的命名格式为:name-VERSION-release.src.rpm。可以发现,SRPM与RPM相比,将arch替换为src,说明SRPM包去掉了arch这一平台类型限制,因此经过用户自己编译安装可以编译成适合自己平台的程序包。

以下为编译过程图解(以C源代码为例):

我们知道,程序源代码一般为多文件组织格式,因此文件中的代码文件之间很有可能存在跨文件的依赖关系,这将给用户自行编译安装带来了极大麻烦,因为对先编译哪些文件、后编译哪些文件根本无从知晓,因此这就需要项目管理器(或者项目构建器)了。C/C++的项目管理器为make,make工具可以在编译过程中指定使用哪个预处理器进行预处理、使用哪个编译器进行编译以及先编译什么程序文件、后编译什么程序文件,甚至完成更为复杂的操作等,能帮助用户快速地编译安装。make工具的执行依赖于makefile配置文档,因此make执行的所有操作皆由makefile指定。makefile可由执行configure脚本生成。而在执行configure脚本时,configure会结合用户通过命令行指定的选项以及各个Makefile.in模板文件来生成makefile文件。编译完成之后即可使用make install命令将编译好的程序包复制到用户指定的各个目录下。

2. C代码编译安装三步骤


(1) 执行configure脚本(# ./configure [option...])

常用选项:

--help:获得其支持使用的选项
--prefix=/PATH/TO/SOMEWHERE:指定默认安装位置;默认为/usr/local/;
--sysconfdir=/PATH/TO/SOMEWHERE:配置文件安装位置;
--enable-FEATURE[=ARG]:开启指定特性以及安装路径;默认开启时无须指定;
--disable-FEATURE:关闭指定特性;默认关闭时无须指定;
--with-PACKAGE[=ARG]:安装指定依赖包以及其安装路径;
--without-PACKAGE:不安装指定依赖包;

执行configure脚本的作用:

①用户可以通过选项传递参数给configure脚本,以指定启用的功能特性、安装路径等;而configure脚本在执行的过程中会参考用户的指定以及Makefile.in文件生成makefile文件;

②检查程序指定要启用的功能特性所依赖到的外部环境。

(2) 执行make程序

作用:

make会执行真正的编译操作,但make本身并不是编译器,它只是一个项目构建工具,make程序会根据执行configure脚本所生成的makefile文件,并调用所需要用到的编译器来构建应用程序。

(3) 执行make install安装操作

作用:

在前面的make程序执行之后,在当前目录下会创建出已编译完成的目标二进制格式的应用程序(包括二进制程序、库文件、配置文件及帮助文档等),而make install则会执行安装操作,即把当前目录下已编译好的程序包(二进制程序、库文件、配置文件及帮助文档等)复制到用户指定的各个目录下。

注意:各个程序在编译安装过程中可能不尽相同,因此建议安装前查看INSTALL, README。

3. 编译安装后的配置


(1) 导出目标二进制程序目录至PATH环境变量中

方法:

在生产环境中如果该二进制程序作为全局变量,可以在/etc/profile.d/目录下创建/etc/profile.d/NAME.d文件,其中‘NAME‘可定义设置名称。在该文件中写入下面一行:

export PATH=PATH:/PATH/TO/BIN

这里的/PATH/TO/BIN即为目标二进制程序所在目录。

(2) 导出库文件路径

方法:

①在/etc/ld.so.conf.d/目录下创建/etc/ld/so.conf.d/NAME.conf,其中NAME为自定义设置名称。而后,添加新的库文件所在目录至此文件中即可。

②做完这一步之后,需要让系统重新生成缓存:

# ldconfig [-v]

(3) 导出头文件(位于include目录)

程序编译安装完成之后,一般在安装路径中会有include目录,这个include目录就是头文件,头文件的功能是把外部文件的内容包含到源文件中,例如外部函数等。在程序开始编译之前,会执行一段预处理指令,而预处理指令则把头文件的内容包含到源文件中。

如果要导出头文件,可基于软链接的方式来实现:

# ln -sv  头文件目录  链接头文件目录

(4) 导出帮助手册

方法:

在CentOS 6上:

编辑/etc/man.config文件,添加一个MANPATH:

# MANPATH /PATH/TO/MAN

这里‘/PATH/TO/MAN‘为目标程序的安装路径下的帮助手册目录。

在CentOS 7上:

编辑/etc/man_db.conf文件,添加一个MANPATH:

# MANPATH_MAP /PATH/TO/BIN            /PATH/TO/MAN

这里/PATH/TO/BIN是目标二进制程序所在目录,/PATH/TO/MAN则是该程序的帮助手册所在目录。

时间: 2024-08-09 06:33:11

编译安装详解的相关文章

CentOS程序包管理器rpm、yum以及程序包编译安装详解

一.程序包管理器RPM和Yum简介 程序包管理器:将编译好的应用程序的各组成文件打包成一个或几个程序包文件,可以更方便地实现程序包的安装.升级.卸载和查询等管理操作. rpm软件包管理器(RPM Package Manager):rpm包存在依赖关系,依赖关系复杂,安装时间很长,虽然可以忽略依赖关系,但是可能会导致程序包安装后无法正常使用. yum程序包管理器( Yellow dog Updater, Modified):yum是基于RPM包管理,自动解决程序包间的依赖关系.根据配置文件的资源地

Apache服务简介及编译安装详解

Apache服务简介及编译安装详解 一.Apache简介 Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,是目前世界上使用最广泛的一种web server,它以跨平台,高效和稳定而闻名,可以运行在几乎所有广泛使用的计算机平台上.Apache的特点是简单.速度快.性能稳定,并可做代理服务器来使用. Apache是用C语言开发的基于模块化设计的web应用,总体上看起来代码的可读性高于php代码,它的核心代码并不多,大多数的功能都被分割到各种

Nginx服务简介及编译安装详解

一.Nginx简介 Nginx是一个自由.开源.高性能及轻量级的HTTP服务器及反向代理服务器,其性能与IMAP/POP3代理服务器相当.Nginx以其高性能.稳定.功能丰富.配置简单及占用系统资源少而著称.Nginx 超越 Apache 的高性能和稳定性,使得国内使用 Nginx 作为 Web 服务器的网站也越来越多 二.Nginx工作原理 Nginx由内核和模块组成,完成工作是通过查找配置文件将客户端请求映射到一个location block(location是用于URL匹配的命令),loc

MySQL5.6二进制软件包编译安装详解(三)

一.软件环境 [[email protected] ~]# uname -r 3.10.0-862.el7.x86_64 [[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) 二.安装部署过程详解 MySQL安装3种方式:1>rpm包安装应用文件默认安装在/usr/local 目录下2>源码编译需要定制文件路径和参数3> 二进制免编译方式优点是可以指定文件安装路径,不存在依赖

centOS linux 下nginx编译安装详解

Nginx的官方网站是 www.nginx.org Nginx的下载地址是:http://nginx.org/en/download.html 由 于官网的设计非常简洁不大气不上档次,所以我们可以很容易的找到我们需要的内容.打开页面发现有三个版本,分别是Mainline version(开发版).Stable version(稳定版).Legact version(历史稳定版).在这里我们下载最新的稳定版本nginx-1.6.2. 在安装Nginx之前,我们要确保系统已经安装了gcc,opens

Linux程序管理之rpm,yum,编译安装详解

操作系统:CentOS 6.7 内核版本:2.6.32-573.el6.x86_64 程序编译概念 程序要在机器上运行,就需要编译,编译针对特定的OS平台和硬件平台,编译后的程序只能运行在特定的软硬平台上  交叉编译:        在测试机上针对其他平台进行程序编译 编译过程:        预编译 -> 编译 -> 汇编 -> 链接            链接:生成库调用的头文件            静态链接:程序文件本身集成所需调用的库文件            动态链接:调用标

MySql5.5.37编译安装详解

      今天为大家介绍下mysql5.5.37的编译安装方式,在工作中编译安装也是我们常用的一种方式.希望通过这篇文章的介绍,能够给大家提供一个安装思路! 一.创建mysql的安装目录和用户 mkdir -p /usr/local/mysql  #安装mysql mkdir -p /usr/local/mysql/data   #存放数据库 groupadd mysql useradd -r -g mysql mysql 二.yum安装依赖库 yum install gcc-c++ ncur

centOS linux 下PHP编译安装详解

一.下载PHP源码包 wget http://php.net/distributions/php-5.6.3.tar.gz 二.添加依赖应用 yum install -y gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libpng libpng-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel g

Apache 2.4. 源码编译安装详解

1).下载httpd软件包和解压 cd  /usr/local/src wget http://apache.opencas.org//httpd/httpd-2.4.18.tar.gz tar zxvf httpd-2.4.18.tar.gz 2).安装前的系统需求: (1)APR and APR-Util cd /usr/local/src wget http://apache.opencas.org//apr/apr-1.5.2.tar.gz wget http://apache.open