【Android】【NDK】目標文件,靜態庫,動態庫

目標文件

目標文件是由源代碼編譯而成的二進制文件
源代碼是供開發者閱讀的文本文件,它的體積大,而且本質上都是文本,無法直接被機器使用,所以需要先編譯爲目標文件
一個源代碼文件,經過編譯就會對應生成一個目標文件

靜態鏈接庫

供主程序代碼調用的庫文件,在編譯時,靜態鏈接庫裏面的功能都會被打包到主程序裏,成爲主程序的一部分

動態鏈接庫

供主程序調用,需要跟隨主程序一起發佈,到運行時纔會被動態調用

可執行文件

能夠被操作系統調用,直接啓動一個應用進程的文件

關聯

靜態鏈接庫,動態鏈接庫和可執行文件,都是由目標文件鏈接而來,只是設計用途不一樣

靜態鏈接庫和動態鏈接庫的特徵對比

  • 靜態庫會被編譯進主程序,不用擔心庫丟失的問題,適合到處拷貝獨立運行,不依賴於外部環境,獨立性強
  • 但由於靜態庫的方式將所有的庫代碼都打包到主程序裏面了,主程序體積就會增大
  • 動態庫的共享性強,比如Windows系統中的dll文件,可以被任意程序調用
  • 由於Windows中的dll文件是共享的,其它程序就無需再包含了,因此動態庫的方式有利於減小主程序體積
  • 動態庫的缺點同樣明顯,它依賴於外部環境,比如Windows系統中常見的dll丟失的問題,每個機子環境是不一樣,到其它機子上可能就無法正常運行了
  • 如果程序想要做成便攜式,一個主程序可以到處直接運行的,適合靜態庫模式
  • 如果希望程序模塊可以動態升級的,適合動態庫模式,只要替換對應模塊的dll文件,就可以實現升級,其它文件都無需替換,主程序也不需要重啓

文件格式

在Windows中,目標文件爲.obj格式,靜態鏈接庫爲.lib格式,動態鏈接庫爲.dll格式,可執行文件爲.exe格式
在Linux中,目標文件爲.o格式,靜態鏈接庫爲.a格式,動態鏈接庫爲.so格式,可執行文件有.rpm等多種格式

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