开放源码软件的安装(tar包安装方法)
开放源码软件的安装
1.基本概念
开放源码:就是程序代码,写给人类看的程序语言,但机器并不认识,所以无法执行
编译程序:将程序代码转换成机器能够看懂的语言,类似翻译者的角色
可执行程序:经过编译程序变成二进制程序后机器看的懂所以可以执行的文件。
函数库:类似子程序的角色,可以被调用来执行的一段的一段功能函数。
一个软件是否可以安装,即是否可以成为可执行程序,必须对安装环境进行检测,检测程序(configure或者config等文件)
检测的内容包含以下数据:
1)是否有适合的编译程序可以编译本软件的程序代码;
2)是否存在本软件所需要的函数库或者其他需要的相关软件;
3)操作系统平台是否适合软件,包括linux的内核版本;
4)内核的头定义文件(header include)是否存在(驱动程序必须要的检测)。
Tarball:就是一个经过Tar打包和gzip或者bzip2打包压缩后的.tar.gz或者.tar.bz2的软件包。里面主要包含三部分内容:
1)源代码文件 2)检测程序文件(可能是configure或者config等文件名)
3)本软件的简,易说明和安装说明(INSTALL或README),很重要,参考他们可实现tarball的安装。
2.安装和升级
安装升级的方式大概有二种:
1)直接将软件源代码通过编译来安装与升级。
2)直接以编译好的二进制程序安装升级,厂商针对自己的平台事先编译出自己平台的二进制程序。在相同的平台只需要安装
就可以,省略检测和编译的过程。例如Redhat系统(fedora、centOS等)开发的RPM软件管理机制和YUM在线跟新模式。
tarball的安装流程:
1)将tarball由厂商的网页下载下来;
2)将tarball解压缩,生成许多的源文件;
3)开始gcc进行源码的编译(会生成可执行文件)
4)然后以gcc进行函数库,主程序,子程序的链接,以形成主要的二进制文件;
5)将上述的二进制文件以及相关的配置文件安装到自己的主机上面。
上面的3.4步骤可以通过make(写makefile)这个命令的功能来简化它。
3.gcc的简易用法
1)将编译的源码制作成目标文件,但不制作链接等功能;
gcc -c hello.c 会生成hello.o文件,并不会生成可执行文件
2)在编译的时候,依据环境优化执行速度
gcc -O hello.c -c 会生成hello.o文件,并且进行了优化。
3)在进行二进制文件的制作时,将链接的函数库与相关的路径填入(这些路径不在默认的位置时需要)
gcc sin.c -lm -L/usr/lib -I/usr/include
* -lm 指的是libm.so或者libm.a这个函数库
* -L后面接的路径是刚才上面那个函数库的搜索目录
* -I后面接的是源码内的includ文件的所在位置
4.make的优点
1)通过makefile文件简化编译时所需要执行的命令。
2)若在编译完成以后,修改了某个源代码,则make仅会对被修改了的文件进行编译,其他的目标文件不会被修改。
3)最后可以依照相依性来更新执行文件。
5.makefile的基本语法和变量
目标(target):目标文件1 目标文件2
<Tab> gcc -o 欲新建的可执行文件 目标文件1 目标文件2
eg :
vim makefile
main:main.o haha.o sin_value.o cos_value.o
gcc -o main main.o haha.o sin_value.o cos_value.o -lm
clean:
rm -f main.o haha.o sin_value.o cos_value.o
*命令行必须以Tab键开头
*目标于目标文件之间以”:"隔开
以上makefile制作了二个执行操作,执行main 输入 make main即可,执行clean 输入make clean即可,如果想要清除在编译
则使用 make clean main就可以了
变量可以像shell script一样 上面的makefile可以改写成
vim makefile
LIBS = -lm
OBJS = main.o haha.o sin_value.o cos_value.o
main: $(OBJS)
gcc -o main $(OBJS) $(LIBS)
clean:
rm -f $(OBJS)
*变量于变量内容以 = 隔开,二边可以有空格
*变量左边不可以有Tab
*变量最好以大写字母,注意使用$符号对变量应用。
6.tarball安装基本步骤
1)获得源文件,将Tarball文件放在/usr/local/src目录下解压缩
2)获得步骤流程,查阅解压缩文件中的INSTALL和README
3)相关属性软件安装,根据INSTALL和README的内容查看并安装好一些相关的软件(非必要)
4)建立makefile:以自检测程序(configure或者config)检测操作环境,并建立makefile文件
5)编译:以make这个程序并使用目录下的makefile作为他的参数配置文件,来进行make(编译,清除等)的操作。
6)安装:以make这个程序,并以makefile这个配置文件,依据install这个目标(targe)来制定正确的安装路径.
7.tarball软件安装的命令执行方式
1)./configure 这个步骤是为了建立makefile的,主要通过Script来检测linux系统的相关属性
2)make clean make读取makefile中的clean目标。建议编译前都执行此步骤,防止上次编译目标文件的残余
3)make make将会按照makefile中的默认工作进行编译,编译的工作主要是进行gcc将源代码编译成可被执行的目标代码 ,
但是这些目标代码还需要一些库函数之类的连接后,才能成为一个完整的可执行文件。
4)make install make会执行makefile中的install操作,将上一步编译的数据安装在默认的目录,完成安装
*以上只要有一步骤不成功,安装就不会成功。
8.tarball软件安装的建议
1)最好将tarball的原始数据解压缩到/usr/local/src当中;
2)安装时,最好安装到/usr/local这个默认路劲中
3) 考虑到将来反安装的步骤,最好将每个软件单独安装在/usr/local下面
4)为安装的单独目录的软件man page加入man path搜索
*如果你安装的软件放在/usr/local/software/中,那么在man page搜素的设置中就要在/etc/man.config内的40-50行左右加入
MANPATH/usr/local/software/man 这样才能通过man来查询软件的在线帮助文档。
9.利用patch跟新源码(不用再下载完整的Tarball)
1)patch跟新的思想和好处:没有改动过的文件的目标文件根本就不需要在进行编译,而且动过的文件又可以通过make来自动的update。
如此以来,我们原先的设置(makefile文件里的规则)将不需要进行重新改写或者检测,可以节省很多时间。
2)具体做法:找出源代码的旧版与新版的差别(用diff命令),再通过相关命令(patch)进行更新。所以软件开发商在跟新源码后,
都会提供所谓的patch file(补丁)文件,用来直接跟新源码。
3)diff与patch的例子:
假设有二个文件包 main-0.1.tgz main_0.1_to_main_0.2.patch 在/root目录下
tar -zxf main-0.1.tgz 解压缩源文件包
cd main-0.1 进入文件main-0.1
patch -p1 < ../main_0.1_to_main_0.2.patch 目前在main.0.1目录,注意patch文件的相对路径
make clean main
./main
make install 安装
main 直接输入命令就执行
*注意:pctch文件只是对源码的更新并不是对软件的更新,还是需要对软件进行编译后才能得到最终正确的软件!!因为patch的功能
只是更新源码而已。要牢记。
*patch必须存在才能完成二个版本的源码更新,不能实现源码的跨版本更新,例如kernel2.4.xx和kernel2.6.xx,是无法使用patch
文件来更新的,他们架构都不一样了。假设kernel2.4.20更新到kernel2.4.26,就必须使用patch2.4.21 2.4.22 2.4.23 ... 2.4.26六个文件
“依次更新”才可以。
10.函数库管理
1)动态函数库 扩展名 libxxx.a的类型
2)静态函数库 扩展名 libxxx.so的类型
3)目前linux大多是将函数库做成动态函数库,再来就是需要增加函数库的读取性能,将常用的函数库加载到内存当中(缓存,cache)
如此一来,当软件使用动态函数库时,就不需要从硬盘中读取,这样就增进了动态函数库的读取速度。
4)如何将动态函数库加载到高速缓存?
a.首先,我们将/etc/ld.so.conf里面写下想要读入高速缓存当中的动态函数库所在的目录!是目录不是文件。
b.接下来就是利用ldconfig这个可执行程序将/etc/ld.so.conf的数据读入缓存。
c.同时也将数据记录一份在/etc/ld.so.cache这个文件中。
11.函数的动态库解析:ldd
1)如何判断可执行程序的二进制文件含有哪些动态的函数库?利用ldd就可以了。
2)例如想知道/usr/bin/passwd这个程序含有那些动态库。可以这样做:
ldd /usr/bin/passwd 找出这个文件的函数库数据
开放源码软件的安装(tar包安装方法)相关推荐
- kali rpm 安装方法_linux下制作安装rpm包的方法
linux下制作安装rpm包的方法 发布时间:2013-04-26 22:39:17 作者:佚名 我要评论 制作rpm包,以rp-pppoe-3.10为列进行制作过程,需要的朋友可以参考下 一 ...
- centos 7使用tar包安装ansible
由于我的yum源没有ansible软件包,防止以后内网服务器也没有ansible的yum源,干脆一点,直接tar包安装!!!! 下载软件包 - # 1.python安装 # python2.7安装 [ ...
- python 安装PIL包的方法以及简单介绍
引用文章1: python安装PIL包的方法 https://www.cnblogs.com/CarbinHee/p/7780279.html 引用文章2: PIL https://www.liaox ...
- Web前端培训知识分享:2种离线安装npm包的方法
学习Web前端的朋友都知道JavaScript是前端绕不开的话题,也是学习的重难点.而npm是连接JavaScript的一扇大门,能解决NodeJS代码部署上的很多问题,很多人在学习时对于npm包怎么 ...
- 解决离线安装依赖包的方法
解决离线安装依赖包的方法 参考文章: (1)解决离线安装依赖包的方法 (2)https://www.cnblogs.com/rong2019/articles/11910867.html (3)htt ...
- Centos7安装MySQL-RPM包安装
Centos7安装MySQL-RPM包安装 前期准备工作 Vmware中安装好Centos7虚拟机,并启动起来 下载好MySQL相关RPM包 安装有Xshell 和Xftp 等访问CentOS系统的工 ...
- linux下tar包安装sudo命令,ubuntu12.04LTS安装gv-412-Linux-x86.tar.gz方法
折腾了2天多,终于装好了. 操作系统 Ubuntu 12.04 LTS (在win7系统下用ubuntu的windows安装工具安装的,有点类似双系统) gaussian view程序 gv-412- ...
- Linux安装软件包无法打开rpm,详解Linux 操作系统下安装rpm包的方法步骤
第2代Linux操作系统在安装软件方面相当简单:第一步,搜索你要的软件,比如你要找一个游戏软件,它的名称叫myward,这个游戏软件的介绍是:myown war game.Linux操作系统搜索这个软 ...
- linux 命令mysql5.6,linux下mysql5.5mysql5.6的tar包安装
提前yum安装依赖包 yum -y install perl perl-devel libaio* 'perl(Data::Dumper)' 准备好mysql的tar包 1.在/usr/local下解 ...
- gcc的安装----rpm包安装顺序
GCC,rpm包安装顺序 cd/mnt/cdrom/Server kernel-headers-2.6.18-128.el5.i386.rpm glibc-headers-2.5-34.i386.rp ...
最新文章
- chrom扩展开发-入门
- Flink1.4.0连接Kafka0.10.2时遇到的问题
- Dart.Powerweb.livecontrols应用
- 通过bios修改服务器ipmi配置,Dell服务器之配置ipmi远程console管理
- cUrl 强大的文件上传/下载工具
- c# 获取字符串的字节数
- 微分方程之————微分方程的基本概念
- 2021-12-20---2021SC@SDUSC---DolphinScheduler(13)
- 企业管理系统各主要模块简介
- python学习感悟
- ubntu 五笔输入法 打不出词组
- 软件自动化测试框架STAF
- 量化投资学习——技术指标介绍
- FPGA数字信号处理之乘法器
- 如何使用python做图_如何使用python做动图
- 拉里·埃里森亲自支招,数据库自动化之后,DBA何去何从?
- Java基础——匿名内部类详解及举例
- 判断是否为Debug模式
- 漫话:什么是平衡(AVL)树?这应该是把AVL树讲的最好的文章了
- CA双向认证完整实现步骤(附java客户端代码)
热门文章
- openstack安装newton版本dashboard+cinder(六)
- Servlet请求转发RequestDispatcher接口
- Linux下的帮助命令
- 关于修改域用户密码的WebPart的问题的问题.
- orale如果是整数后面补小数点0_Win10完美整数大小磁盘分区
- 螃蟹保存方法保存时间_螃蟹吃不完怎么保存?学会这4招,不论是海蟹、河蟹通通都不愁...
- 递增三元数组——第九届蓝桥杯C语言B组(省赛)第六题
- pyCharm-激活码(2018)
- Springmvc 的post请求的json格式参数
- web开发需要注意/n的问题