zoukankan      html  css  js  c++  java
  • VC 链接没有 lib 文件的 dll

    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 文件。

  • 相关阅读:
    人生转折点:弃文从理
    人生第一站:大三暑假实习僧
    监听器启动顺序和java常见注解
    java常识和好玩的注释
    182. Duplicate Emails (Easy)
    181. Employees Earning More Than Their Managers (Easy)
    180. Consecutive Numbers (Medium)
    178. Rank Scores (Medium)
    177. Nth Highest Salary (Medium)
    176. Second Highest Salary(Easy)
  • 原文地址:https://www.cnblogs.com/Dageking/p/2959522.html
Copyright © 2011-2022 走看看