Linux源代码包编译安装

Linux编译安装

在使用Linux系统的过程中,软件包的安装是避免不了的。在Linux下,软件安装程序的种类很多,安装方法也各式各样,Linux的不同发行版本中都有自己的包安装工具,例如apt-get、yum、brew等等,但是这些包管理工具对于一个开发人员来说是远远不能满足需求的,所以为了能从根本上hold住还是得学习从源代码包中编译安装。

原始的c和c++代码都会进行打包,常见的是tar.gz、tar.bz2(tar.gz的用 tar zxvf 解压,tar.bz2的用 tar jxvf 解压),需要编译之后才能安装,在编译过程中你可以指定各种参数以适应你的系统需求,比如安装位置,优化参数,要哪些功能不要哪些功能等等。

Linux编译安装三步曲

从源代码安装过软件的朋友一定对 ./configure && make && make install 安装三步曲非常熟悉了。用一句话来解释这个过程就是:

根据源码包中 Makefile.in 文件的指示,configure 脚本检查当前的系统环境和配置选项,在当前目录中生成 Makefile 文件(还有其它本文无需关心的文件),然后 make 程序就按照当前目录中的 Makefile 文件的指示将源代码编译为二进制文件,最后将这些二进制文件移动(即安装)到指定的地方(仍然按照 Makefile 文件的指示)。

configure

这一步一般用来生成 Makefile,为下一步的编译做准备,基本上所有可以对安装过程进行的个性化调整都集中在这一步。你可以通过在 configure 后加上参数来对安装进行控制。

make

这一步就是编译,大多数的源代码包都经过这一步进行编译(当然有些perl或python编写的软件需要调用perl或python来进行编译)。在 make 过程中可能会出现 error ,系统少了一些依赖库等,这些需要自己仔细研究错误代码。

make install

这条命令来进行安装(当然有些软件需要先运行 make check 或 make test 来进行一些测试),这一步一般需要你有 root 权限(因为要向系统写入文件)。

通用configure选项

configure脚本有大量的命令行选项.对不同的软件包来说,这些选项可能会有变化,但是许多基本的选项是不会改变的。带上–help选项执行configure脚本可以看到可用的所有选项.尽管许多选项是很少用到的,但是当你为了特殊的需求而configure一个包时,知道他们的 存在是很有益处的。下面介绍一些通用的选项。

脚本自身选项

--help //显示帮助信息

--version //显示版本信息

--cache-file=FILE //在FILE文件中缓存测试结果(默认禁用)

--no-create //configure脚本运行结束后不输出结果文件,常用于正式编译前的测试。

--quiet, --silent //不显示脚本工作期间输出的"checking ..."消息。

目录选项

--srcdir=DIR //源代码文件所在目录,默认为configure脚本所在目录或其父目录。

--prefix=PREFIX //体系无关文件的顶级安装目录PREFIX ,默认值一般是 /usr/local 或 /usr/local/pkgName

--exec-prefix=EPREFIX //体系相关文件的顶级安装目录EPREFIX ,默认值一般是 PREFIX

--bindir=DIR //用户可执行文件的存放目录DIR ,默认值一般是 EPREFIX/bin

--sbindir=DIR //系统管理员可执行目录DIR ,默认值一般是 EPREFIX/sbin

--libexecdir=DIR //程序可执行目录DIR ,默认值一般是 EPREFIX/libexec

--datadir=DIR //通用数据文件的安装目录DIR ,默认值一般是 PREFIX/share

--sysconfdir=DIR //只读的单一机器数据目录DIR ,默认值一般是 PREFIX/etc

--sharedstatedir=DIR //可写的体系无关数据目录DIR ,默认值一般是 PREFIX/com

--localstatedir=DIR //可写的单一机器数据目录DIR ,默认值一般是 PREFIX/var

--libdir=DIR //库文件的安装目录DIR ,默认值一般是 EPREFIX/lib

--includedir=DIR //C头文件目录DIR ,默认值一般是 PREFIX/include

--oldincludedir=DIR //非gcc的C头文件目录DIR ,默认值一般是 /usr/include

--infodir=DIR //Info文档的安装目录DIR ,默认值一般是 PREFIX/info

--mandir=DIR //Man文档的安装目录DIR ,默认值一般是 PREFIX/man

特性选项

--enable-FEATURE //启用FEATURE特性

--disable-FEATURE //禁用FEATURE特性

--with-PACKAGE=DIR //启用附加软件包PACKAGE,亦可同时指定PACKAGE所在目录DIR

--without-PACKAGE //禁用附加软件包PACKAGE

参考资料

分类

开发
    --go (9)
    --java (5)
    --php (11)
    --mysql (9)
    --javascript (3)
    --html (1)
    --算法 (6)
架构
    --理论 (9)
    --网络 (3)
    --服务器 (2)
    --消息队列 (3)
    --容器 (5)
    --监控 (1)
    --搜索引擎 (3)
    --大数据 (0)
    --测试 (1)
系统
    --linux (10)
    --mac (2)
    --windows (1)
足球
    --世界杯 (60)
    --欧洲杯 (28)
    --文迷 (3)
大学时光
    --校园生活 (96)
    --假期生活 (17)
    --广院杯那些事 (14)
    --北京奥运 (6)
    --胡思乱写 (17)


最近发布

零拷贝技术介绍

服务网格技术简介

C语言标准和标准库简介

Kubernetes简介及环境搭建

Go语言开发的顶级项目


归档

2006 (109)
2007 (40)
2008 (47)
2009 (10)
2010 (6)
2012 (10)
2013 (14)
2014 (27)
2015 (15)
2016 (6)
2017 (8)
2018 (11)
2019 (17)
2020 (5)