再說DLL與LIB

轉載地址:http://qiusuoge.com/8227.html

.dll和.lib都是程序集合,便於代碼重用。都是二進制的文件。

    .dll也叫動態鏈接庫,與程序鏈接的方式爲運行時鏈接(run-time linked),爲PE(portable executable)格式,也就是程完整的程序。.exe、.dll、.fon、.mod、.drv、.ocx等等都是動態鏈接庫。如.exe爲系統調用的函數集合。.dll不存在同名引用,且有導出表,與導入表。

   .lib也叫靜態鏈接庫,在編譯時與程序鏈接(link-time linked),將“嵌入”到程序中。會有冗餘(程序文件代碼的冗餘和運行時內存存儲的冗餘),當兩個lib相鏈接時地址會重新建立同。在使用.lib之前,要在程序源代碼中引用lib對應的頭文件.h,這些頭文件告訴編譯器.lib中有什麼。

    在生成.dll時,通常會生成一個.lib。這個.lib將被編譯到程序文件中,在程序運行的時候,告訴操作系統將要加載的.dll。這個.lib包括對應.dll的文件名、順序表(ordinal table包含.dll暴露出的函數的進入點),在程序運行的時候,通過順序表實現函數的跳轉。

    如果不想使用或者找不到該.lib,可以用LoadLibrary () Win32 API和GetLibrary () Win32 API。(暫時不知道怎樣處理:))

    VC IDE爲了實現程序調試,會生成.PDB(程序數據庫,二進制),裏面包含源文件調用的文件信息和行信息。這樣就可以逐行調試了。(不是很明白:))

    打開.lib,查看其ascii碼,可以看到如@@My_Function1123的函數名,這些名稱在編譯時被編譯器運用mangling mechanism(混淆機制?不知道怎麼翻譯)進行了名稱的mangling。

    在程序的編譯過程中,如果出現如下錯誤“unresolved symbol _some_funtion@1234”,通常是因爲找不到引用過的外部函數對應的.lib文件,或者是.c、.cpp源文件。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章