操作系統之動態庫和靜態庫

什麼是庫?

平時在寫代碼的時候會經常添加一些頭文件,添加這些頭文件其實是讓編譯器從一個目錄下去尋找這個文件,這個目錄就是我們常說的庫。在Linux中庫一般存放在user/lib目錄。庫就是將一些常用的函數的目標文件打包在一起,提供相應的函數接口,以便於使用。

什麼是靜態庫?

靜態庫就是在編譯連接的時候,將庫中的代碼連接直接複製到可執行文件中,這樣程序在運行的時候就不用去連接動態庫了。靜態庫的這個連接過程就是靜態鏈接。

什麼是動態庫?

動態庫就是程序在運行的時候纔去連接動態庫的代碼,可以多個程序共享動態庫中的代碼,這個動態庫的連接過程就是動態鏈接,也就是在執行文件開始之前將外部函數的機器碼有系統從磁盤上對應的動態庫中向內存複製一份。

靜態庫和動態庫的區別?

1、動態庫是在運行時有系統調用庫函數實現鏈接,代碼較小巧。而靜態庫是在鏈接是複製到代碼中,代碼量比較龐大,冗餘度高。
2、由於靜態庫是通過複製的方式,所以他在編譯連接之後就不再需要靜態庫,代碼的可以執行強,但是動態庫由於是利用本地的庫函數,如果將代碼移植到其他電腦會出現運行bug等,可移植性差。
3、動態庫必須放在指定的目錄下完成連接,但是靜態庫只需要給出鏈接文件的路徑就可以。
4、他們的相同點就是在庫文件中不能出現main函數,庫都是用來提供函數接口的,不暴露源代碼,所有的庫的目的都是爲了增加代碼的複用,可共享性,減小冗餘。
5、在windows中靜態庫是後綴是.lib,動態庫是.dll,在Linux中靜態庫是.a,動態庫是so。
6、使用ar創建靜態庫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章