和Vamei大佬學動態鏈結庫 so

2022-06-18 12:00:11 字數 416 閱讀 5657

每乙個c程式中,除了用於實現演算法和資料結構 (比如棧和相關的操作),還有用於測試的main()函式,結構體定義,函式原型,typedef等等。

這樣的做法非常不「環保」。演算法的實際運用和演算法的實現混在一起。如果我想要重複使用之前的源程式,必須進行許多改動,並且重新編譯。最好的解決方案是實現模組化: 只保留純粹的演算法實現,分離標頭檔案,並編譯乙個庫(library)。每次需要使用庫的時候(比如使用棧資料結構),就在程式中include標頭檔案,連線庫。這樣,不需要每次都改動源程式。

我在這裡介紹如何在unix環境中建立共享庫 (shared library)。unix下,共享庫以so為字尾(shared object)。共享庫與windows下的dll類似,是在程式執行時動態連線。多個程序可以連線同乙個共享庫。

單獨摘抄會失去靈魂,建議反覆閱讀原文

ref:

靜態鏈結庫和動態鏈結庫

其實再vc中,我們所用得所有api函式都封裝再下列三個dll檔案中 kernel32.dll 用於管理記憶體,程序和執行緒得各個函式 user32.dll 用於執行使用者介面任務,如視窗的建立和訊息的傳遞的各個函式 gdi32.dll 用於顯示文字和畫圖的各個函式 動態鏈結庫 我們再使用動態庫的時候...

靜態鏈結庫和動態鏈結庫

靜態鏈結庫 win32 static library 呼叫libtest.lib 動態dll win32 dynamic link library 跟librest的生成是一樣的 動態呼叫 成的.lib 和.dll 檔案拷入dllcall 工程所在的路徑,dllcall 執行下列 dll 中匯出函式...

靜態鏈結庫和動態鏈結庫

以前的時候寫過這方面的部落格,當時寫的時候都覺得已經懂了。今天閒著沒事幹,和咚哥他們去大華校招筆試遇到了這個問題。我突然間發現sdk沒寫三個月,把dll都忘記了。回來看了下,複習下。以前寫過程式的裝載和鏈結的部落格,那是os上面比較理論的。實際用函式庫的時候主要分為,靜態庫和動態庫,這裡就簡簡單單地...