由.def檔案產生lib檔案

來源:互聯網
上載者:User

        最近在學習curl庫時,碰到一個問題,從官網上下載了一個lib版的,卻發現只有.dll,沒有lib檔案,感覺很奇怪,google了之後才知道,原來庫作者的用意是讓使用者自己產生lib檔案,下載到的lib檔案中含有.def檔案。唉,用了vs有幾個年頭了,卻連這麼基礎的問題都不知道,編譯器是變得越來越智能了,只是讓我們變得越來越傻了。下邊我總結了一下由.def產生lib的方法。

        在使用 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 檔案。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.