通俗理解動態庫與靜態庫區別

  • 引:最近做了算法產品化相關的一些工作,其中涉及到算法庫封裝的相關工作,封裝爲動態庫。總結動態庫和靜態庫區別和對應使用原則。

  • 區別:靜態庫和動態庫最本質的區別就是:該庫是否被編譯進目標(程序)內部

  • 分別介紹:

    • 靜態(函數)庫
      一般擴展名爲(.a或.lib),這類的函數庫通常擴展名爲libxxx.a或xxx.lib 。
      這類庫在編譯的時候會直接整合到目標程序中,所以利用靜態函數庫編譯成的文件會比較大,這類函數庫最大的優點就是編譯成功的可執行文件可以獨立運行,而不再需要向外部要求讀取函數庫的內容;但是從升級難易度來看明顯沒有優勢,如果函數庫更新,需要重新編譯。
    • 動態函數庫
      動態函數庫的擴展名一般爲(.so或.dll),這類函數庫通常名爲libxxx.so或xxx.dll 。
      與靜態函數庫被整個捕捉到程序中不同,動態函數庫在編譯的時候,在程序裏只有一個“指向”的位置而已,也就是說當可執行文件需要使用到函數庫的機制時,程序纔會去讀取函數庫來使用;也就是說可執行文件無法單獨運行。這樣從產品功能升級角度方便升級,只要替換對應動態庫即可,不必重新編譯整個可執行文件。
  • 總結:綜上,不能看出:

    • 從產品化的角度,發佈的算法庫或功能庫儘量使動態庫,這樣方便更新和升級,不必重新編譯整個可執行文件,只需新版本動態庫替換掉舊動態庫即可。
    • 從函數庫集成的角度,若要將發佈的所有子庫(不止一個)集成爲一個動態庫向外提供接口,那麼就需要將所有子庫編譯爲靜態庫,這樣所有子庫就可以全部編譯進目標動態庫中,由最終的一個集成庫向外提供功能。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章