區別:1、靜態連結的進行是在形成可執行程式前,而動態連結的進行則是在程式執行時;2、靜態連結函式庫的程式碼裝載速度快,執行速度略比動態連結庫快;3、和動態連結相比,靜態連結產生的可執行檔體積較大。
本教學操作環境:linux5.9.8系統、Dell G3電腦。
linux中動態連結與靜態連結
#編譯連結的過程
編譯分為3步,先對原始檔進行預處理,這個過程主要是處理一些#號定義的指令或語句(如巨集、#include、預編譯指令#ifdef等),產生*.i檔;然後進行編譯,這個過程主要是進行詞法分析、語法分析和語意分析等,產生*.s的組譯檔;最後進行彙編,這個過程比較簡單,就是將對應的彙編指令翻譯成機器指令,產生可重定位的二進位目標文件。
連結的兩種方式
靜態連結
連結
##靜態連結和動態連結兩者最大的差異就在於連結的時機不一樣,靜態連結的進行是在形成可執行程序前,而動態連結的進行則是在程式執行時。
靜態連結函式庫的優點a):程式碼載入速度快,執行速度略比動態連結函式庫快;
b):只需要確保在開發這段電腦中有正確的.lib文件,再以二進位形式發佈程式時不需要考慮使用者的電腦上的.lib檔案是否有版本問題,可以避免DLL地獄等問題。
動態連結函式庫的優點a) 更能節省記憶體並減少頁面交換;
b) DLL檔案與EXE檔案獨立,只要輸出介面不變__即名稱、參數、回傳值類型和呼叫約定不變__,更換DLL檔案不會對EXE檔案造成任何影響,因而大幅提高了可維護性和可擴充性;
c)不同程式語言編寫的程式只要依照函數呼叫約定就可以呼叫同一個DLL函數;
#d)適用於大規模的軟體開發,讓開發過程獨立、耦合度小,便於不同開發者和開發組織之間進行開發和測試。
不足a)使用靜態連結產生的可執行檔體積較大,包含相同的公用程式碼,造成浪費;
# b)使用動態鏈接庫的應用程式不是自完備的,它依賴的DLL模組也要存在,如果使用載入時動態鏈接,程式啟動時發現DLL不存在,系統將終止程式並給出錯誤訊息。而使用運行時動態鏈接,系統不會終止,但由於DLL中的導出函數不可用,程式會加載失敗;速度比靜態鏈接慢。當某個模組更新後,如果新模組與舊的模組不相容,那麼那些需要該模組才能運作的軟體,就統統撕掉。這在早期Windows中很常見。 相關推薦:《
Linux影片教學###》###以上是linux中動態連結和靜態連結的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!