VC 鏈接沒有 lib 文件的 dll


在使用 VC 鏈接 dll 時,通常需要一個導入庫文件(.lib),但有時我們只有一個 dll 文件,怎么辦呢?

通常,在鏈接庫文件時,需要一個 (.lib)文件,lib 文件分為兩種:一種為靜態鏈接庫(Static Libary,以下簡稱靜態庫”),另一種為動態連接庫(DLL,以下簡稱動態庫”)的導入庫(Import Libary,以下簡稱導入庫”)。VC 在鏈接 dll 時,需要根據導入庫(.lib)來定位 dll 中的符號位置。沒有這個文件,VC 鏈接器將不能正常鏈接。

解決此問題的辦法有三個:

    1. 使用 DLL to Lib 工具,根據 dll 文件生成 lib 文件。
    2. 使用 LoadLibrary 函數加載 dll 文件,再使用 GetProcAddress 來查找函數地址,根據得到的函數指針來進行調用。
    3. 編寫模塊定義文件(.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 文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM