第五十六讲——源码包安装 本文共有30443个字,关键词: 源码包安装分为三个步骤,和程咬金的三板斧差不多。 大致的流程为:源程序-->编译-->二进制格式 在进行编译的时候,有些特性是可以选定的,如果编译时未选定此项特性,安装成功后将无法使用。 我们需要知道的是,rpm包的版本会落后源码包,甚至会落后很多。我们可以自己定制,即手动编译安装。 编译环境(开发环境) 开发库,开发工具 c环境,C++,perl,java,python c、c++的编译器 c编译器:gcc GNU C computer c++编译器:g++ 三板斧: make: c或者c++的项目管理工具 这个工具可以将多个不同项目的文件做成一个项目,并将这个项目的编译过程通过配置文件来提供,这个配置配置文件叫做makefile。 makefile:定义了make(make会调用gcc、g++)按某种次序去编译源程序文件中的源程序。 我们使用make编译一个c项目的时候,这个c项目必须要有makefile文件,但是makefile文件并不属于程序自身的组成部分。 没有makefile文件,用户就无法进行编译的工作,那么问题来了,makefile文件时怎么生成的。 为了使程序员开发的程序能让其他不理解程序的人顺序编译,有人开发了一个叫做automake的工具,对源程序做一个简单的介绍。 automake--->makefile.in makefile.in只是一个半成品,并不是一个完整的makefile文件,尚不能进行编译工作。 makefile.in还可以进行完善,它还可以接收另一个工具(autoconf)所生成的脚本配置。 autoconf是为我们的项目生成脚本的。 autoconf---->configure(脚本) configure是配置我们当前这个程序如何编译,例如,我们开发完一个程序后有几十个特性,或者几十个可供用户选择的特性,更重要的是我们将要把程序安装到什么位置(编译完成后),makefile.in文件时指定不了的,makefile.in最多只能判定如何去编译,至于程序的安装位置我们需要安装额外的接口来指定。因此,makefile.in是无法跟用户交互的,我们需要借助configure脚本来实现。 configure脚本就是提供用户决定(选择/禁用)程序的那些特性,我们通过configure脚本指定后,结合makefile.in最终生成makefile文件。 将可选特性通过脚本输出,用户选择完程序特性之后通过makefile.in保存在makefile文件中,而后我们使用make命令结合makefile中指定的方式对源程序进行编译,编译完成之后就可以将编译好的二进制格式文件放到对应的目录。 make install 安装 在configure的时候我们就已经告诉了程序安装在什么位置,因此make install就是将编译好的程序配置文件、库文件以及帮助文件放到指定目录。 源码编译安装的三个步骤: 我们需要先对源码包进行解压缩,并且进入到解压后的目录。 在当前目录下执行./configure命令 ./configure --prefix=/path/to/somewhere(指定程序的帮助文档安装路径) --conf-path=/path/to/somewhere配置文件的安装目录 如果我们不指定配置文件的位置,配置文件会安装到默认的路径下,在安装路径的conf或者etc目录下。 我们需要知道的是,不同程序的configure脚本所支持的特性是不尽相同的。 我们可以使用./configure --help获取当前configure脚本的帮助文档(使用格式)。 如果configure文件执行结束,它会结合makefile.in生成makefile文件,生成makefile文件后我们就可以执行make命令了。 #make此步骤为执行make命令 #make install 执行安装命令 我们在指定安装位置时,/usr/local 安装到/usr/local/bin,/usr/local/sbin,我们可以单独为其指定安装目录,卸载的时候很方便,直接删除目录即可。 我们需要知道的是手动编译是不能够快捷卸载的。 configure的功能 一是让用户选定编译的特性 二是检查编译的环境 我们在编译的时候会遇到依赖关系,而这些依赖通常都是程序的devel包(程序的子包) 以安装Apache服务为例,安装在/usr/local/apache中,其/sur/bin/apache/sbin下的脚本是不能够在命令行直接执行的,因为没有加入到环境变量中,我们可以手动编辑/etc/profile文件在最后一行手动加入一行: PATH=$PATH:/usr/local/apache/sbin(不会立即生效),我们可以手动重新读取配置文件生效。 source /etc/profile 重读配置文件,但是不建议重新读取,重新登录即可。 在执行configure的时候,我们需要注意的是检查环境的结果,一定要注意有没有报错信息,其缺少依赖,一般都是依赖*.devel*.rpm的包,即依赖关系,在安装这个子包后解决,源码安装的时候缺什么就使用yum安装什么,一并解决依赖关系。 源码程序的安装到这个时候并没有结束,虽然我们解决了依赖关系和环境变量,最重要的库文件并没有加入到默认的搜索路径。 默认情况下,系统默认搜索库文件的路径为/lib,/usr/lib,我们增加额外的路径时,需要在/etc/ld.so.conf.d/中创建一个以.conf结尾的文件,而后把要添加的库文件路径写入文件中,重启后生效。 # ld config -v 通知系统重新搜寻库文件 -v 重新搜寻库文件(立即生效) PATH环境变量的修改 直接修改/etc/profile文件 echo‘PATH=$PATH:/path/to/somewhere’ 我们也可以直接在/etc/profile.d/目录下创建一个以.sh结尾的文件,在文件中声明一个全局变量PATH: #!/bin/bash export PATH=$PATH:/path/to/somewhere 任何一个源程序,如果要调用别人的库,就必须要将别人的库包含进来,才能使用(调用)别人的库。 库文件其实就是函数,函数能够接收参数,参数是有类型的,这些都需要进行声明,包含到当前系统中来。 所以任何一个程序要调用别人的库,要使用到#include(包含) 每一个输出了库文件的软件,头文件中包含了自己所提供的库文件函数,以及函数的调用参数,参数类型等相关属性,这些属性是被其他人依赖这个软件做二次开发的时候调用软件所提供的功能时所使用的规范式文件。 所以头文件也需要输出,否则二次开发后的程序将诶发运行。 导出头文件,输出给系统,我们自己的头文件路径系统是找不到的,系统默认路径为/usr/include,我们可以通过连接的方式增添头文件的搜寻路径。 我们可以将其他目录中的头文件链接到/usr/include下(诸逐个连接),也可以直接将一个目录连接到/usr/include下,改一个名字。 每个文件单独链接:ln –s /usr/local/tengine/include/* /usr/include 将目录链接至/usr/include下:ln –s /usr/local/tengine/include /usr/include/tengine 编译安装时,帮助文档安装在—prefix=/path/to/somewhere 指定的位置 指定位置下有一个*/man的目录 系统的帮助文档存放在/usr/share/man下,其下有man1,man2……分章节存放 所以系统中找到man文件的路径也是有限的。 我们可以在/etc/man.config中进行定义man帮助文档的路径(MANPATH),我们可以在此处加入对应程序帮助文档的路径 man –M /path/to/man_dir command 为命令指定帮助文档 「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」 赞赏 × 几人行 (๑>ڡ<)☆谢谢老板~ 2元 5元 10元 50元 100元 任意金额 2元 使用微信扫描二维码完成支付 版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。 给自己讲linux 2017-01-25 评论 1610 次浏览