多份原始檔和靜態庫的產生的悲劇

2021-06-07 19:09:46 字數 376 閱讀 9971

有2個工程

project a, b分別是處理不同邏輯的工程,但是此二者都用到parser功能(在parser資料夾下,裡面包含了實現parser功能的原始檔),但是某人為了方便或偷懶,沒有將parser功能的那些實現組織成乙個工程.

而是分別在a, b工程都有乙份parser功能的實現**檔案, a是靜態庫,b是動態庫.且b工程中是依賴a的.

有一天,有人修改了b中parser裡面某個函式的實現細節,再次重新編譯a,b,

悲劇即將發生,

鏈結的時候,由於b是依賴a,由於鏈結順序的問題,導致a中的某個函式的實現鏈結到b產生的obj檔案.這導致a的某些函式功能失效.

請不要偷懶,把重複**重構成單獨的庫,為擴充套件函式增加引數或者介面來面對細節變化吧.

動態庫和靜態庫的區別

一 什麼是庫?庫是共享程式 的方式,一般分為靜態庫和動態庫。靜態庫 鏈結時完整地拷貝至可執行檔案中,被多次使用就有多份冗餘拷貝。動態庫 鏈結時不複製,程式執行時由系統動態載入到記憶體,供程式呼叫,系統只載入一次,多個程式共用,節省記憶體。二 靜態庫和動態庫的好處 使用靜態庫的好處 至於蘋果為啥禁止i...

動態庫和靜態庫的匯出

1.匯出動態庫 a.在cpp檔案中定義 define dllexport extern c declspec dllexport 在標頭檔案中 ifndef dllexport define dllexport extern c declspec dllimport endif b.在標頭檔案中定義...

共享庫和靜態庫的製作

庫是一組預先編譯好的函式的集合,這些函式都是按照可重用的原則編寫的。它們通常由一組相互關聯的函式組成來執行某項常見的任務,標準庫的位置一般存放在 lib和 user lib目錄中。庫的命名規則名字總是以lib開頭以.a或者.so結尾,其中以.a結尾的代表傳統的靜態函式庫,而以.so結尾的代表共享函式...