30.1 程序及库简介
30.1.1 POSIX
API:Application Program Interface
POSIX:Portable OS,定义了不同系统如何提供统一的API
30.1.2 程序运行流程
程序源代码à预处理à编译à汇编à链接
静态编译
共享编译:.so
30.1.3 Windows和Linux程序兼容方式
ABI:Application Binary Interface
Windows与Linux的ABI不兼容
库级别的虚拟化
WINE:Windows库的虚拟化,让Windows程序可在Linux上运行
cywin:Linux库的虚拟化,让Linux程序可在Windows上运行
30.1.4 应用程序开发
系统级开发(面向底层进行开发)
C,C++
应用级开发(面向系统和库进行开发)
java,python,phpdeb,perl,ruby
二进制应用程序的组成部分:
二进制文件,库文件,配置文件,帮助文件
30.2程序包管理
30.2.1 程序包管理器:
debian:包名deb,包管理器dpt
redhat:包名rpm,包管理器rpm(Redhat Package Manager)
RPM is Package Manager(C语言研发)
Gentoo
Archlinux
30.2.2 程序源代码及rpm包
1、程序源代码:name-VERSION.tar.gz
VERSION:major.monor.release
2、rpm包
命名方式
name-VERSION-ARCH.rpm
VERSION:major.monor.release
ARCH:release(rpm包的release).os(支持的linux型号).arch(支持的cpu型号)
常见的arch:
x86:i386,i486,i586,i686
x86_64:x64,x86_64,amd64
powerpc:ppc
跟平台无关:noarch
例:zlib-1.2.7-17.el7.x86_64.rpm
程序包拆包
testapp:
testapp-VERSION-ARCH.rpm:主包
testapp-devel-VERSION-RACH.rpm:支包
testapp-testing-VERSION-RACH.rpm
依赖关系
X依赖Y,Y依赖Z
ldd + 程序:查看二进制程序的依赖关系
[root@localhost ~]# ldd /bin/ls
linux-vdso.so.1 => (0x00007fffb09b7000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f69482d3000)
libcap.so.2 => /lib64/libcap.so.2 (0x00007f69480ce000)
libacl.so.1 => /lib64/libacl.so.1 (0x00007f6947ec4000)
libc.so.6 => /lib64/libc.so.6 (0x00007f6947af6000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f6947894000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f694768f000)
/lib64/ld-linux-x86-64.so.2 (0x000055807796f000)
libattr.so.1 => /lib64/libattr.so.1 (0x00007f694748a000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f694726e000)
[root@localhost ~]#
管理及查看本机装载的库文件:
ldconfig
/sbin/ldconfig -p:显示本机已经缓存的所有可用库文件及文件路径映射
配置文件为:/etc/ld.so.conf,/etc/ld.so.conf.d/*.conf
缓存文件:/etc/ld.so.cache
[root@localhost ~]# ldconfig -p | head -10
1095 libs found in cache /etc/ld.so.cache
p11-kit-trust.so (libc6,x86-64) => /lib64/p11-kit-trust.so
libz.so.1 (libc6,x86-64) => /lib64/libz.so.1
libyelp.so.0 (libc6,x86-64) => /lib64/libyelp.so.0
libyajl.so.2 (libc6,x86-64) => /lib64/libyajl.so.2
libxtables.so.10 (libc6,x86-64) => /lib64/libxtables.so.10
libxslt.so.1 (libc6,x86-64) => /lib64/libxslt.so.1
libxshmfence.so.1 (libc6,x86-64) => /lib64/libxshmfence.so.1
libxml2.so.2 (libc6,x86-64) => /lib64/libxml2.so.2
libxmlsec1.so.1 (libc6,x86-64) => /lib64/libxmlsec1.so.1
[root@localhost ~]#
30.2.3 包管理器的前端工具
yum:rpm包管理器的前端工具,用于解决依赖关系,自动下载所需要的程序及其依赖包
apt-get:deb包管理器前端工具
zypper:suse上的rpm前端管理工具
dnf:Fedora 22+ rpm包管理器的前端管理工具
30.2.4 程序包管理
程序包管理:
功能:将编译好的应用程序的各组成文件打包成一个或几个程序文件,从而方便快捷的实现程序的安装,卸载,查询,升级,校验等管理操作
1、程序的组成清单(每个包独有)
文件清单
安装或卸载时运行的脚本
2、数据库(公共)
程序包名称及版本
依赖关系;
功能说明;
安装生成的各文件的文件路径及校验码信息
管理程序包的方式:
使用包管理器:rpm
使用前端工具:yum,dnf
获取程序包的路径:
1、系统发行版的光盘或者是官方的服务器
CentOS镜像:
2、项目官方站点
3、第三方组织:
Fedora-EPEL
搜索引擎:
4、自己制作
建议:检查其合法性
来源合法性;程序包的完整性;
评论关闭。