linux下源码安装软件

基础知识

  1. Make与Configure
    当执行 make 时,make 会在当时的目录下搜寻 Makefile (or makefile) 这个文件,而 Makefile 里面则记录了原始码如何编译的详细资讯! make 会自动的判别原始码是否经过变动了,而自动更新执行档。
    因为软件商都是针对Unix-like进行开发,所以他会写一套侦测作业系统来检查环境
    • 是否有适合的编译器可以编译本软体的程式码;
    • 是否已经存在本软体所需要的函式库,或其他需要的相依软体;
    • 作业系统平台是否适合本软体,包括 Linux 的核心版本;
    • 核心的表头定义档 (header include) 是否存在 (驱动程式必须要的侦测)。
  2. 压缩文件安装
    其中最重要的是那个 INSTALL 或者是 README 这两个文件,通常你只要能够参考这两个文件, Tarball 软体的安装是很简单的
    • 取得原始档:将 tarball 档案在 /usr/local/src 目录下解压缩;
    • 取得步骤流程:进入新建立的目录底下,去查阅 INSTALL 与 README 等相关档案内容 (很重要的步骤!);
    • 相依属性软体安装:根据 INSTALL/README 的内容察看并安装好一些相依的软体 (非必要);
      建立 makefile:以自动侦测程式 (configure 或 config) 侦测作业环境,并建立 Makefile 这个档案;
    • 编译:以 make 这个程式并使用该目录下的 Makefile 做为他的参数设定档,来进行 make (编译或其他) 的动作;
    • 安装:以 make 这个程式,并以 Makefile 这个参数设定档,依据 install 这个标的 (target) 的指定来安装到正确的路径!

编译步骤

  1. ./configure
    这个步骤就是在建立 Makefile 这个档案啰!通常程式开发者会写一支 scripts 来检查你的 Linux 系统、相关的软体属性等等,这个步骤相当的重要, 因为未来你的安装资讯都是这一步骤内完成的!另外,这个步骤的相关资讯应该要参考一下该目录下的 README 或 INSTALL 相关的档案!
    一般来说 configure 设定参数较重要的就是那个 –prefix=/path 了,–prefix 后面接的路径就是‘这个软体未来要安装到那个目录去?’如果你没有指定 –prefix=/path 这个参数,通常预设参数就是 /usr/local 至于其他的参数意义就得要参考
    configure,这一步一般用来生成 Makefile,为下一步的编译做准备,你可以通过在 configure 后加上参数来对安装进行控制,比如代码:./configure –prefix=/usr 意思是将该软件安装在 /usr 下面,执行文件就会安装在 /usr/bin (而不是默认的 /usr/local/bin),资源文件就会安装在 /usr/share(而不是默认的/usr/local/share)。同时一些软件的配置文件你可以通过指定 –sys-config= 参数进行设定。有一些软件还可以加上 –with、–enable、–without、–disable 等等参数对编译加以控制,你可以通过允许 ./configure –help 察看详细的说明帮助。
  2. make clean
    make 会读取 Makefile 中关于 clean 的工作。这个步骤不一定会有,但是希望执行一下,因为他可以去除目标档案!因为谁也不确定原始码里面到底有没有包含上次编译过的目标档案 (*.o) 存在,所以当然还是清除一下比较妥当的。 至少等一下新编译出来的执行档我们可以确定是使用自己的机器所编译完成的嘛!
  3. make
    make 会依据 Makefile 当中的预设工作进行编译的行为!编译的工作主要是进行 gcc 来将原始码编译成为可以被执行的 object files ,但是这些 object files 通常还需要一些函式库之类的 link 后,才能产生一个完整的执行档!使用 make 就是要将原始码编译成为可以被执行的可执行档,而这个可执行档会放置在目前所在的目录之下, 尚未被安装到预定安装的目录中;
  4. make install
    通常这就是最后的安装步骤了,make 会依据 Makefile 这个档案里面关于 install 的项目,将上一个步骤所编译完成的资料给他安装到预定的目录中,就完成安装啦!
    以上一个步骤不成功,后续步骤都不会成功

./configure

  1. ./configure是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。
  2. 这一步一般用来生成makefile,为下一步编译作准备。可以通过在其后加参数来对安装进行控制。
./configure –prefix=/usr

意思是将该软件安装在 /usr 下面,执行文件就会安装在 /usr/bin (而不是默认的 /usr/local/bin),资源文件就会安装在 /usr/share(而不是默认的/usr/local/share)

--bindir=DIR :指定二进制文件的安装位置,这里的二进制文件定义为可以被用户直接执行的程序。
--sbindir=DIR:指定超级二进制文件的安装位置。这是一些通常只能由超级用户执行的程序。
--datadir=DIR:指定通用数据文件的安装位置。

Make

  1. make,这一步就是编译,大多数的源代码包都经过这一步进行编译(当然有些perl或python编写的软件需要调用perl或python来进行编译)。如果 在 make 过程中出现 error ,你就要记下错误代码(注意不仅仅是最后一行),然后你可以向开发者提交 bugreport(一般在 INSTALL 里有提交地址),或者你的系统少了一些依赖库等,这些需要自己仔细研究错误代码。
  2. make 的执行过程如下:
    • 1.依次读取变量“MAKEFILES”定义的 makefile 文件列表
    • 2.读取工作目录下的 makefile文件(根据命名的查找顺序“GNUmakefile”, “makefile”,“Makefile”,首先找到那个就读取那个)
    • 3.依次读取工作目录 makefile 文件中使用指示符“include”包含的文件
    • 4.查找重建所有已读取的 makefile 文件的规则(如果存在一个目标是当前读取的 某一个makefile 文件,则执行此规则重建此 makefile 文件,完成以后从第一步开始重新执行)
    • 5.初始化变量值并展开那些需要立即展开的变量和函数并根据预设条件确定执行分支
    • 6.根据“终极目标”以及其他目标的依赖关系建立依赖关系链表
    • 7.执行除“终极目标”以外的所有的目标的规则(规则中如果依赖文件中任一个 文件的时间戳比目标文件新,则使用规则所定义的命令重建目标文件)
    • 8.执行“终极目标”所在的规则

make命令

最常见的几个目标:
make all:编译程序、库、文档等(等同于make)
make install:安装已经编译好的程序。复制文件树中到文件到指定的位置
make unistall:卸载已经安装的程序。
make clean:删除由make命令产生的文件
make distclean:删除由./configure产生的文件
make check:测试刚刚编译的软件(某些程序可能不支持)
make installcheck:检查安装的库和程序(某些程序可能不支持)
make dist:重新打包成packname-version.tar.gz

Make install

  1. 在编译的时候,gcc个版本之间存在着差异,所以有时候用不同版本的gcc去编译,有的版本能编译成功,有的就编译失败,这样的错误只是版本问题。
  2. 另外在make的时候会出现的另一个错就是比较难办的,遇到这样的问题就只能凭经验查找原因,比如说某个头文件没有找到,这个时候就要顺着出错的位置一行一行的往上找,比如显示XXXXXX.h………no such file or directory,说明缺少头文件,或者找到你觉得有价值的错误信息去搜索引擎里搜索,从这里可能会找到对你有用的信息,最重要的就是在安装之前仔细的去看README、INSTALL文件,这两个文件里会告诉你程序应该怎样去安装,需要什么依赖文件等等。有的时候在编译时不知道是否编译成功,而在没有编译成功就去make install肯定会出错,这样就增加了问题的复杂性,俗话说的好“道高一尺魔高一丈”,这样我们可以在make结束的时候通过一条命令来检查是否成功编译:
echo  $?

输入这条命令回车后,输出的结果是0,那么就说明成功编译,否则就是出错了,echo $?表示检查上一条命令的退出状态,程序正常退出返回0!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值