1.軟件的運行和編譯
? ABI:Application Binary Interface(不同的操作系統(tǒng)有不同的ABI)
Windows與Linux不兼容
ELF(Executable and Linkable Format)
PE(Portable Executable)
庫級別的虛擬化:(可以運行在其他的操作系統(tǒng))
Linux: WINE
Windows: Cywin
? API:Application Programming Interface(應(yīng)用程序接口)
POSIX:Portable OS
? 程序源代碼 --> 預(yù)處理 --> 編譯 --> 匯編 --> 鏈接
靜態(tài)編譯:.a
動態(tài)編譯:.so
2.靜態(tài)和動態(tài)鏈接
? 鏈接主要作用是把各個模塊之間相互引用的部分處理好,使
得各個模塊之間能夠正確地銜接,分為靜態(tài)鏈接和動態(tài)鏈接
? 靜態(tài)鏈接
? 把程序?qū)?yīng)的依賴庫復(fù)制一份到包
? libxxx.a
? 嵌入程序包
? 升級難,需重新編譯
? 占用較多空間,遷移容易
? 動態(tài)鏈接
? 只把依賴加做一個動態(tài)鏈接
? libxxx.so
? “連接指向”
? 占用較少空間,升級方便
3.包管理器
?二進制應(yīng)用程序的組成部分:
二進制文件、庫文件、配置文件、幫助文件
?程序包管理器:
debian:deb文件, dpkg包管理器
redhat: rpm文件, rpm包管理器
rpm: Redhat Package Manager
RPM Package Manager
4.包命名
? 源代碼:name-VERSION.tar.gz|bz2|xz
VERSION: major.minor.release
? rpm包命名方式:
name-VERSION-release.arch.rpm
例:bash-4.2.46-19.el7.x86_64.rpm
VERSION: major.minor.release
release:release.OS
常見的arch:
x86: i386, i486, i586, i686
x86_64: x64, x86_64, amd64
powerpc: ppc
跟平臺無關(guān):noarch
5. 包:分類和拆包
Application-VERSION-ARCH.rpm: 主包
Application-devel-VERSION-ARCH.rpm 開發(fā)子包
Application-utils-VERSION-ARHC.rpm 其它子包
Application-libs-VERSION-ARHC.rpm 其它子包
? 包之間:可能存在依賴關(guān)系,甚至循環(huán)依賴
? 解決依賴包管理工具:
yum:rpm包管理器的前端工具
apt-get:deb包管理器前端工具
zypper: suse上的rpm前端管理工具
dnf: Fedora 18+ rpm包管理器前端管理工具
6.庫文件
? 查看二進制程序所依賴的庫文件
ldd /PATH/TO/BINARY_FILE
? 管理及查看本機裝載的庫文件
ldconfig 加載庫文件
/sbin/ldconfig -p: 顯示本機已經(jīng)緩存的所有可用庫文件名及文件路徑映射關(guān)系
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
緩存文件:/etc/ld.so.cache
可以夾在自己的so模塊
Paste_Image.png
7.包管理器
- 程序包管理器:
功能:將編譯好的應(yīng)用程序的各組成文件打包一個或幾個
程序包文件,從而方便快捷地實現(xiàn)程序包的安裝、卸載、查詢、升級和校驗等管理操作- 包文件組成 (每個包獨有)
RPM包內(nèi)的文件
RPM的元數(shù)據(jù),如名稱,版本,依賴性,描述等
安裝或卸載時運行的腳本- 數(shù)據(jù)庫(公共):/var/lib/rpm(很重要,千萬不要刪哦)
程序包名稱及版本
依賴關(guān)系
功能說明
包安裝后生成的各文件路徑及校驗碼信息
8.程序包的來源
- 管理程序包的方式:
使用包管理器:rpm
使用前端工具:yum, dnf
? 獲取程序包的途徑:
(1) 系統(tǒng)發(fā)版的光盤或官方的服務(wù)器;
CentOS鏡像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
(2) 項目官方站點
(3) 第三方組織:
Fedora-EPEL:
Extra Packages for Enterprise Linux
Rpmforge:RHEL推薦,包很全
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/
(4) 自己制作? 注意:第三方包建議要檢查其合法性
來源合法性,程序包的完整性