在使用 VC 鏈接 dll 時,通常需要一個導入庫文件(.lib),但有時我們只有一個 dll 文件,怎么辦呢?
通常,在鏈接庫文件時,需要一個 (.lib)文件,lib 文件分為兩種:一種為靜態鏈接庫(Static Libary,以下簡稱“靜態庫”),另一種為動態連接庫(DLL,以下簡稱“動態庫”)的導入庫(Import Libary,以下簡稱“導入庫”)。VC 在鏈接 dll 時,需要根據導入庫(.lib)來定位 dll 中的符號位置。沒有這個文件,VC 鏈接器將不能正常鏈接。
解決此問題的辦法有三個:
-
- 使用 DLL to Lib 工具,根據 dll 文件生成 lib 文件。
- 使用 LoadLibrary 函數加載 dll 文件,再使用 GetProcAddress 來查找函數地址,根據得到的函數指針來進行調用。
- 編寫模塊定義文件(.def),使用命令行生成 lib 文件。
以下重點介紹使用模塊定義文件來生成 lib 的方法。
模塊定義文件是用來描述 dll 文件的文本格式的文件,其格式如下:
LIBRARY libdll.dll ;dll 文件的文件名
DESCRIPTION "描述信息" ;描述信息,此行可以不要
EXPORTS
lib_add @1 ;函數描述
lib_sub @2 ;函數描述
第一行:在 LIBRARY 后面填 dll 文件的名字,分號后面是注釋。
第二行:DESCRIPTION,描述信息,此行可以忽略
第三行:EXPORTS
第四行開始,是 dll 文件中函數的描述,可以使用 dumpbin /EXPORTS libdll.dll 命令查看,(其中,libdll.dll 是目標 dll 的文件路徑)
以上文件寫好后,保存成 libdll.def 文件,放在和 dll 文件相同的目錄。
使用 lib /def:libdll.def 命令,可以生成 lib 文件。