軟件包基礎(chǔ)

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
? “連接指向”
? 占用較少空間,升級方便

Paste_Image.png

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.程序包的來源

? 注意:第三方包建議要檢查其合法性

來源合法性,程序包的完整性

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,933評論 18 139
  • 目錄:軟件運行環(huán)境介紹包管理器rpm 包管理器的使用yum rpm包管理器前端工具的使用編譯安裝 一、軟件運行環(huán)境...
    哈嘍別樣閱讀 601評論 0 0
  • 軟件運行和編譯 鏈接主要作用是把各個模塊之間相互引用的部分處理好,使得各個模塊之間能夠正確地銜接,分為靜態(tài)鏈接和動...
    塵曦的雨閱讀 250評論 0 0
  • 鮮花盛開的時候 總是枯萎的 溪水流淌的時候 總是冰凍的 愛情開始的時候 總是灰色的
    淺夢如棲閱讀 224評論 14 1
  • 這張主題是圓,我畫了一些圓型,紙張轉(zhuǎn)了四個方向看一看,我覺得像氣球,因此畫了一些線條,感覺是一束氣球。老師說你的線...