動態鏈結庫dll,靜態鏈結庫lib, 導入庫lib

2021-08-25 06:36:17 字數 708 閱讀 8374

導入庫和靜態庫的區別很大,他們實質是不一樣的東西。靜態庫本身就包含了實際執行**、符號表等等,而對於導入庫而言,其實際的執行**位於動態庫中,導入庫只包含了位址符號表等,確保程式找到對應函式的一些基本位址資訊。

這也是實際上很多開源**發布的慣用方式:

1. 預編譯的開發包:包含一些.dll檔案和一些.lib檔案。其中這裡的.lib就是導入庫,而不要錯以為是靜態庫。但是引入方式和靜態庫一樣,要在鏈結路徑上新增找到這些.lib的路徑。而.dll則最好放到最後產生的應用程式exe執行檔案相同的目錄。這樣執行時,就會自動調入動態鏈結庫。

3. 如果你只有dll,並且你知道dll中函式的函式原型,那麼你可以直接在自己程式中使用loadlibary調入dll檔案,getprocaddress

使用動態鏈結代替靜態鏈結有若干優點。dll 節省記憶體,減少交換操作,節省磁碟空間,更易於公升級,提供售後支援,提供擴充套件 mfc 庫類的機制,支援多語言程式,並使國際版本的建立輕鬆完成。

警告 呼叫 windows api 和 其他 dll 函式可能會給您的應用程式帶來不良影響。從自己的**中直接呼叫 dll 函式時,您繞過了 vba 通常提供的一些安全機制。如果在定義或呼叫 dll 函式時出現錯誤(所有程式設計師都不可避免),可能會在應用程式中引起應用程式錯誤(也稱為通用性保護錯誤,或 gpf)。最好的解決辦法是在執行**以前儲存該專案,並確保了解 dll 函式呼叫的原理。

這些模式是互斥的;每次只能以一種模式使用 lib。

動態鏈結庫 靜態鏈結庫

包含標頭檔案和庫 idir 指定編譯查詢標頭檔案的目錄,常用於查詢第三方的庫的標頭檔案,例 gcc test.c i.inc o test。ldir 指定鏈結時查詢lib的目錄,常用於查詢第三方庫。llibrary 指定額外鏈結的lib庫 巨集定義 dmacro 以字串 1 預設值 定義 macro...

靜態鏈結庫 動態鏈結庫

庫是寫好的現有的,成熟的,可以復用的 現實中每個程式都要依賴很多基礎的底層庫,不可能每個人的 都從零開始,因此庫的存在意義非同尋常。本質上來說庫是一種可執行 的二進位制形式,可以被作業系統載入記憶體執行。庫有兩種 靜態庫 a lib 和動態庫 so dll windows上對應的是.lib dll ...

靜態鏈結庫,動態鏈結庫

關於靜態鏈結庫,參考如下博文 當你完成了 開發,想把這個 給別人用,但是又不希望別人看到原始碼,就要給別人乙個庫和標頭檔案,庫和標頭檔案是配合的,缺一不可。或者過程相反,你從別人那裡拿到乙個庫和標頭檔案來使用。那麼如何編譯生成乙個庫給他人,如何使用從他人那裡拿到的庫呢?範例1 我們想把linuxfr...