zoukankan      html  css  js  c++  java
  • 由.def文件生成lib文件[转]

      最近在学习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 文件。

    来源: http://blog.csdn.net/windows_nt/article/details/9708101

  • 相关阅读:
    2:编写虚幻引擎中的UC和C++代码
    1:编写虚幻引擎中的UC和C++代码
    0:编写虚幻引擎中的UC和C++代码
    4:虚幻引擎网络架构:技术要点总结篇
    3:虚幻引擎网络架构:GameInfo,PlayerMove
    2:虚幻引擎网络架构:Replication
    1:虚幻引擎网络架构:Actors
    R12-表详解-总帐
    clob 类型
    成本更新和算法
  • 原文地址:https://www.cnblogs.com/tibetanmastiff/p/7053482.html
Copyright © 2011-2022 走看看