第21章 軟體安裝

2021-08-13 19:22:07 字數 3099 閱讀 4344

第一種,最簡單的情況,單原始碼編譯

1、 假如我們寫了乙個名為hello.c的c語言程式(其實也就是名為hello.c的純文字):

#include 

int main(void)

這個程式就是所謂的源**。也就是程式設計師編寫出來的程式。

此時這個程式是不能夠直接執行的,因為它只是個純文字。能夠執行的是可執行程式。資料夾中是這樣的:

第一種情況,最簡單的,直接用gcc:

//直接用gcc指令將編譯鏈結過程一步走過。

gcc hello.c

執行完後,資料夾是這樣的:

//上步執行完後,會在同位置目錄裡生成乙個a.out檔案。然後執行就可以了。

./a.out

hello world

#編譯,這步就是將hello.c檔案編譯成機器碼。這步過後會生成hello.o檔案,這個就是編譯後的檔案,叫目標檔案!

gcc -c hello.c

第一步過後資料夾裡多了個hello.o(hello.c的型別為文字,就是字元。而hello.o的型別已經變成了文件,就是二進位制了):

#鏈結,這步就是將上步生成的目標檔案鏈結生成可執行檔案,同時還能命名可執行檔案。這步過後,會生成你自己命名的可執行檔案。

gcc -o hello hello.o

第二步過後,就生成了我們定義的hello可執行檔案(齒輪圖示檔案,型別為程式):

#最後就會有生成的名為hello的可執行檔案,執行就可以了。跟上方一樣的輸出結果

./hello

hello world

整個分開的過程可以發現,後一步都是用的前一步生成的檔案去操作,也就是gcc -o 的時候,用的是上一步生成的hello.o,跟最初的hello,c 其實沒有什麼關係了。

第二種,需要鏈結的多原始碼編譯

上面的情況編譯時只有hello.c乙個源**,加入要是有好多個源**呢?

首先我們有兩個源**,

乙個是thanks.c:

#include 

int main(void)

發現它呼叫了thanks_2()函式。這個函式在另外乙個源**thanks_2中:

//thanks_2.c

#include

void thanks_2(void)

這種情況很符合實際使用,因為thanks_2這種專業函式,可能是你花錢購買的特殊需求的函式,而你在thanks中只管呼叫就可以了。不用管它怎麼實現的。

當然編譯也很簡單,摞在一起就好了:

//編譯,會生成thanks.o和thanks_2.o

gcc -c thanks.c thanks_2.c

//鏈結,會生成thanks可執行檔案

gcc -o thanks thanks.o thanks_2.o

//執行,輸出。

./thanks

hello world

thank you!

上方是最直接的編譯鏈結方式,直接利用gcc編譯器進行手動操作,其實一般使用是基本都是用cmake來操作的。關於cmake,後面再說。

考慮到管理使用者所安裝軟體的便利性。通常我們會建議大家將自己安裝的軟體放置在 /usr/local 下,源**則建議放置在 /usr/local/src (src 為 source 的縮寫)底下。

linux distribution 預設的安裝軟體的路徑會用到哪些?

靜態函式庫的特色:

動態函式庫的特色:

目前的 linux distribution 比較傾向於使用動態函式庫,因為如同上面提到的最重要的一點, 就是函式庫的公升級方便!由於 linux 系統裡面的軟體相依性太複雜了,如果使用太多的靜態函式庫,那麼公升級某乙個函式庫時, 都會對整個系統造成很大的衝擊!因為其他依賴項也要同時重新編譯啊! 這個時候動態函式庫可就有用多了,因為只要動態函式庫公升級就好,其他的軟體根本無須變動。

那麼這些函式庫放置在**呢?絕大多數的函式庫都放置在:/lib64, /lib 目錄下!

原始碼的安裝形式,確實比較煩。如果我的 linux 系統與廠商的系統一模一樣,那麼在廠商的系統上面編譯出來的可執行檔案, 自然也就可以在我的系統上面跑!

也就是說,廠商先在他們的系統上面編譯好了我們使用者所需要的軟體, 然後將這個編譯好的可執行的軟體直接發布給使用者來安裝,如此一來,由於我們本來就使用廠商的 linux distribution ,所以當然系統 (硬體與作業系統) 是一樣的,那麼使用廠商提供的編譯過的可執行檔案就沒有問題!

說簡單點就是利用類似 windows 的安裝方式,由程式開發者直接在已知的系統上面編譯好,再將該程式直接給使用者來安裝。

那麼如果在安裝的時候還可以加上一些與這些程式相關的資訊,將他建立成為資料庫,那不就可以進行安裝、反安裝、 公升級與驗證等等的相關功能了麼 (類似 windows 底下的『新增移除程式』)?確實如此,在 linux 上有兩種常見的這方面的軟體管理方式,分別是 rpm 與 debian 的 dpkg 。

目前在 linux 界軟體安裝方式最常見的有兩種,分別是:

書中並沒有介紹apt的用法,而是介紹的rpm。後面再寫apt吧。。。

《敏捷軟體開發》學習筆記 第21章 22章

21章太短,2章就寫一塊了。21章 工廠模式 我一直認為,工廠模式的問題不是控制時間上的各種變化,而是複雜度的問題。很多時候建立工廠都是過度設計,以前乙個谷歌員工說,自己辭職離開谷歌,並且第二次回到谷歌之後發現原來寫的 全部加上了各種各樣的工廠。22章 包的結構表示法 第一張,預設的uml包結構圖 ...

第21章 預處理

1 巨集的高階使用 va args file function 等 2 va args 的用法 1.1 用在預編譯語句裡面可以把預編譯函式的變數直接格式成字串 如 define func1 x printf the square of x is d.n x x 呼叫func1 30 則輸出 the ...

網路基礎 第21章 VLAN

vlan virtual lan 虛擬區域網 1 廣播的危害 增加網路 終端負擔,傳播病毒,安全性。2 如何控制廣播?控制廣播 隔離廣播域 1 路由器隔離廣播 物理隔離廣播 缺點 成本高 不靈活。2 採用新技術vlan來控制廣播,vlan技術是在交換機上實現的且是通過邏輯隔離劃分的廣播域。1 vla...