Linux中靜、動態函數庫的優缺點__Oracle

來源:互聯網
上載者:User

在編寫程式的時候,我們經常會使用到函數庫。函數庫即為一個事先已經寫好的函數的集合,其效能都是比較優秀並得到公眾認可的。而我們在需要實現一些功能的時候,如果函數庫裡已經有該功能的實現函數,則我們可以直接使用函數庫中來實現,而無需再重新編寫程式碼。
在Linux作業系統中,函數庫根據是否被編譯到程式內部而分為靜態函數庫和動態函數庫。

靜態函數庫 副檔名(.a) 編譯行為
靜態函數庫在編譯的時候會被直接整合到執行程式之中,因此執行程式會大一些。 可以獨立執行
由於靜態函數庫會被整合到執行程式中,即執行程式相當於已經有了靜態函數庫的一個副本了,那麼執行程式便可以獨立執行,與原靜態函數庫的狀態無關了。 升級
因為函數庫會跟著來源程式一起編譯,因此,如果函數庫升級了,那麼使用該函數庫的來源程式需要重新編譯產生新的執行程式。

動態函數庫 副檔名(.so) 編譯行為
包含動態函數庫的來源程式在編譯的時候,使用動態函數庫的地方只有一個指向函數庫的“指標”而已,並沒有將動態函數庫整合進來,然後在執行程式要使用到函數庫的時候才根據這個“指標”去調用相應的動態函數庫,所以執行檔案比較小。 不能獨立執行
因為在編譯的時候,動態函數庫在執行程式中只是一個“指標”的存在,並且在執行的時候調用,因此,動態函數庫需要在程式執行的時候存在,並且函數庫的目錄要跟程式中的“指標”保持一致。 升級
因為編譯的時候函數庫只是留下一個地址,因此只要地址不變,函數庫變化了也不會影響程式的執行。因此,在動態函數庫升級的時候,來源程式不需要重新編譯。(這裡可以看出,動態函數庫本身似乎可以很容易地進行修改,比較重要的是其存放的位置,如果位置發生改變,會導致使用該函數庫的程式在執行時發生錯誤)

對於目前的開發比較傾向於動態函數庫,原因是升級容易。因此,我們也需要瞭解我們的二進位執行檔案到底使用了哪些動態函數庫。而ldd命令可以查詢到。

**ldd [-vdr] [filename]**參數:-v: 列出所有內容資訊;-d: 重新將資料有丟失的link點顯示出來;-r: 將ELF有關的錯誤內容顯式出來。

例如我們常用到的ls命令,我們可以查看其使用到的動態函數庫。

我們先用which命令查看ls命令的目錄。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.