Linux手动编译源代码文件

一、简介

    Linux系统上程序包安装的方式多种多样,一般来说可通过rpm包安装、yum在线安装等方式实现。但有时候为了实现某种功能,而这种功能在通常情况下又不是太常用或是因为其他原因,不能通过yum下载安装或在网上没有找到rpm包,只是找到了程序安装包的源代码的话,这种情况下我们就可以对源代码直接进行编译安装,以便解决这种临时需求。当然这只是其中一种情况,而因为其他原因而采用源代码编译安装的情况也经常存在,所以有必要梳理下采用源代码安装程序包的安装方式。

   手动编译源代码文件通常需要依赖相关的库环境、编译开发工具等,不同语言编写的源代码它们所依赖的头文件、本地库、编译工具和被依赖的程序包的开发组件等各不相同。

二、用法详解

 一般来说带“devel”关键字的rpm包都是这个程序包的开发组件。

   包组(此处列出包组仅适用于centos6,其他版本名称各有不同):

   Development tools(含编译器、汇编器、链接器等工具,必须)

   Server Platform Development(服务器平台开发组件,必须)

   Desktop Platform Development(桌面平台开发组件,非必须,视情况安装)

   Debug Tools(非必须,视情况安装)

 被依赖的程序包的开发组件:两种方式:

   (1) 编译安装被依赖的程序;

   (2) 安装相关程序的名称中包含devel的子包;

例:安装开发工具组件,命令为:yum groupinstall "开发工具" ,详情见下图:

blob.png

例:安装服务器平台开发组件,命令为:yum groupinstall "服务器平台开发" ,详情见下图:

blob.png

安装好开发套件之后就可以进行相关配置操作。

GNU make:配置文件:makefile

注意:

(1)每个项目的程序员开发完成某版本之后,会使用autoconf为程序代码生成一个脚本文件:configure;

功用:此脚本会收集当前系统上的开发环境中所依赖各组件的版本、特性等,并检查所依赖的环境是否能满足,最后会根据Makefile.in 文件生成一个makefile文件;

(2)每个项目的程序员开发完成某版本之后,会使用automake为程序代码生成一个makefile模板文件,即Makefile.in。

编译人员的编译安装过程:

   (1) 运行configure脚本;常使用选项指明:

      安装路径: –prefix=/usr/local/nginx (该路径如不存在会自动创建)

      启用或禁用的特性;

      依赖的程序包;

   (2) 运行make命令,完成项目构建;

   (3) 运行make install命令,完成安装(大多数情况只有管理员有权限执行此命令);

注意:前两步只需要普通用户权限,建议使用普通用户身份进行;最后一步根据安装路径的指定,可能会用到管理权限。

configure脚本的应用:

   –help: 查看帮助信息;

   –prefix: 指定默认安装路径;

   –sysconfdir: 指定配置文件安装路径

   –with-CAPABILITY(依赖某特性)

   –without-CAPABILITY(不依赖某特性)

   –enable-FEATURE(启用某特性)

   –disable-FEATURE(禁用某特性)

例:安装nginx-1.6.2.tar.gz源代码安装包,详情见下图:blob.png

blob.png

blob.png

blob.png

例:安装源代码格式的httpd程序包 ,详情见下图:

blob.png

blob.png

blob.png

程序运行环境:

二进制文件:$PATH环境变量指明的路径下,/bin, /sbin, /usr/bin, /usr/sbin,/usr/local/bin,/usr/local/sbin

自己编译的程序文件安装路径如果不在PATH环境变量指定的程序搜索路径中:

(1) 使用绝对路径;

(2) 编译PATH环境变量,加入此些程序文件所在目录;

export PATH=extra_path:$PATH

把上面的命令保存于/etc/profile.d/*.sh文件中

blob.png

库文件:

默认情况下,大多数应用程序都依赖于标准库某些共享库文件,甚至于某些应用提供的特定的库文件;

Linux系统会在特定路径下为应用查找所依赖的库文件:/lib64, /lib, /usr/lib64, /usr/lib

自己编译安装的程序提供的库文件有可能不在系统搜索路径中,解决办法:两步骤:

(1) 编辑/etc/ld.so.conf.d/*.conf文件,添加新库文件搜索路径至此文件中,每行一个;

(2) 执行ldconfig命令,重新生成库映射缓存ld.so.conf

ldconfig命令:configure dynamic linker run-time bindings

用于生成/etc/ld.so.cache

常用选项:

-p: 打印当前系统ld.so.cache中已经缓存的所有库文件目录及库文件映射列表;

-v: 显示命令执行过程的详细信息;

blob.pngblob.pngblob.png

blob.pngblob.png

blob.png

blob.png

头文件导出方案:

方法:

(1) 复制所有新生成的头文件至/usr/include目录中(不推荐);

(2) 创建链接

  ln -sv /usr/local/apache/include /usr/include/httpd

  ln -sv /usr/local/apache/include/* /usr/include/

blob.pngblob.png

man手册文件:

Linux会到特定目录下查找用户需要使用命令手册

路径:/etc/man.config配置文件中,使用MANPATH指令指向的路径;

方法:

(1) 在此文件新增MANPATH指令,并指向新的命令手册路径;

(2) 在man命令执行时使用-M选项显式指定手册而查找路径即可;

blob.png

blob.pngblob.png

blob.pngblob.pngblob.png

注意:如果安装的程序是一个服务类程序,rpm安装的方式通常为自动生成服务脚本文件(此文件为rpm制作者所提供),但编译安装不会有;需要卸载时只需删除安装目录即可。

注意:编译安装的程序包,尽可能把所有文件安装至一个专用路径下,卸载时删除此目录即可;

其它程序语言(如:perl, python, ruby, java)开发的源码包,编译安装方式可能会有所不同;

这种情况一般查看INSTALL, README文件里的使用说明即可。

原创文章,作者:镜花水月,如若转载,请注明出处:http://www.178linux.com/8433

(2)
镜花水月镜花水月
上一篇 2015-09-26
下一篇 2015-09-27

相关推荐

  • N25期—第一周作业

    计算机的组成及其功能 计算机主要由硬件和软件两部分组成, 硬件目前由5大部件组成 控制器:类似人类的大脑!控制整个计算机的运作 运算器:对数据进行逻辑运算处理 存储器:存放数据部件 输出设备:比如显示器,打印机 输入设备:比如键盘,鼠标 Linux发行版本 主要三大分之:Debian系,Reb Hat系,Slackware系。 1.Debian GNU / …

    Linux干货 2016-12-01
  • Linux磁盘和文件系统基础

    概述     Linux系统上,磁盘要正常的进行数据的存储,需要先进行分区,再进行格式化生成文件系统,最后挂载到某个目录下,才能进行正常的数据存取,本篇就介绍一下磁盘从分区到正常使用的几个步骤,具体分为以下几个部分:     1、磁盘的基础概念   &nbsp…

    Linux干货 2016-08-29
  • Tomcat性能优化-2

    修改Connector运行模式 启用NIO 或 APR bio介绍 bio(blocking I/O,阻塞式I/O操作),表示Tomcat使用的是传统的Java I/O操作 默认模式,性能最差,没有经过任何优化处理和支持 nio模式 nio(non-blocking I/O),Java SE 1.4…

    Linux干货 2016-09-19
  • yum与rpm生产中最频繁使用

    yum 命令 使用方法: yum [选项] [包名称] 常用选项: install #安装软件,后面跟包名称,例如:yum install wget 安装wget软件包list #列出所有软件,一般和grep一起使用,例如:yum list | grep java ,查看所有java安装包,一般情况下不使用search,grep可以更大范围搜索包,例如只记得…

    Linux干货 2017-04-18
  • Linux 压缩、解压缩和打包工具

        前言:你是否曾经因为某个文件占用空间较大,而空间紧缺的U盘无法存放此文件。你是否曾经因为软件里有太多文件而不方便复制和携带。你是否曾因需要备份太过零散而头疼。那么基于“文件压缩和打包”的技术因此出现。下面介绍下Linux下关于压缩、解压缩和打包的工具及使用。 一、相关术语的原理和意义   &…

    Linux干货 2015-07-15
  • Linux用户和组管理

    使用对象:Linux初学者   Linux系统中用户和组管理是很重要的一部分内容。许多初学者在学习或刚接触到用户管理的时候会觉得很难理解,命令多、选项多、配置文件也多,用命令可以修改,用配置文件也可以修改,三两下就被绕进去了。其实完全没必要晕,只要了解了用户管理的方式,就会很容易理解命令选项与配置文件之间的关系。下面我们就来了解下用户管理命令与配置…

    Linux干货 2016-10-23

评论列表(2条)

  • 云中鹤
    云中鹤 2015-09-26 22:50

    写的这么用心

    • 镜花水月
      镜花水月 2015-09-26 23:20

      @艾贺谢谢,希望在自己记录博客的同时,能帮助到大家 。