動態和靜態函數庫
靜態函數庫的特色:
拓展名:為.a,函數庫通常拓展名為lib×××.a類型
編譯行為:會直接整合到執行程序當中,所以利用靜態函數庫編譯成的文件會比較大
獨立執行的狀態:最大的優點就是編譯成功的可執行文件可以獨立執行,不需要向外部要求讀取函數庫內容
升級難易度:只要函數庫升級了,所有將此函數庫納入的程序都需要重新編譯。
動態函數庫的特色:
拓展名:.lib××××.so
編譯行為:在編譯時,程序裡面只有一個指向(pointer)的位置而已,也就是當可執行文件當中僅具有指向動態函數庫所在的指標而已,並不包含函數庫的內容,文件會小。
獨立執行的狀態:這類函數庫編譯的程序不能被獨立執行,當使用到的時候,程序才會讀取函數庫,所以函數庫文件必須要存在,且函數庫的所在目錄也不能改變。
升級難易度:容易
目前linux傾向使用動態函數庫,因為升級方便,只要動態函數庫升級就行,其他軟件無需變動。
如果我們將常用到的的動態函數庫先加載到內存中,如此一來,當軟件要使用函數庫就不用從硬盤讀取。如何將動態函數庫加載到高速緩存當中呢?
1.首先要在/etc/id.so.conf裡面寫下想要讀入高速緩存的動態函數庫所在的目錄。
2.接下來利用idconfig這個可執行文件將/etc/id.so.conf的數據讀入緩存
程序的動態函數庫解析:Ldd
如果我想知道/usr/bin/passwd 這個程序含有的動態函數庫有哪些,可以這樣做
檢測軟件的正確性:
可通過每個文件獨特的指紋驗證數據,MD5