`
ugmtm78u
  • 浏览: 13425 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

DLL与LIB

 
阅读更多

DLL与LIB
2009年07月20日
  lib和dll
  lib和dll文件的区别和联系
  .dll是在你的程序运行的时候才连接的文件,因此它是一种比较小的可执行文件格式,.dll还有其他的文件格式如.ocx等,所有的.dll文件都是可执行。
  .lib是在你的程序编译连接的时候就连接的文件,因此你必须告知编译器连接的lib文件在那里。一般来说,与动态连接文件相对比,lib文件也被称为是静态连接库。当你把代码编译成这几种格式的文件时,在以后他们就不可能再被更改。如果你想使用lib文件,就必须:
  1 包含一个对应的头文件告知编译器lib文件里面的具体内容
  2 设置lib文件允许编译器去查找已经编译好的二进制代码
  如果你想从你的代码分离一个dll文件出来代替静态连接库,仍然需要一个lib文件。这个lib文件将被连接到程序告诉操作系统在运行的时候你想用到什么dll文件,一般情况下,lib文件里有相应的dll文件的名字和一个指明dll输出函数入口的顺序表。如果不想用lib文件或者是没有lib文件,可以用WIN32 API函数LoadLibrary、GetProcAddress   FreeLibrary(显示链接)。事实上,我们可以在Visual C++ IDE中以二进制形式打开lib文件,大多情况下会看到ASCII码格式的C++函数或一些重载操作的函数名字。
  一般我们最主要的关于lib文件的麻烦就是出现unresolved symble 这类错误,这就是lib文件连接错误或者没有包含.c、.cpp文件到工程里,关键是如果在C++工程里用了C语言写的lib文件,就必需要这样包含:
  extern "C"
  {
  #include "myheader.h"
  }
  这是因为C语言写的lib文件没有C++所必须的名字破坏,C函数不能被重载,因此连接器会出错。
  ===============================
  在VC中不用MFC如何制作dll
  方法一:使用export 和 import
  在VC中建立一个Console Application,建立2个文件:Dll.h 和 Dll.cpp
  Dll.h
  #ifdef MYLIBAPI
  #else
  #define MYLIBAPI extern "C" _declspec (dllimport)
  #end if
  MYLIBAPI int Add (int iLeft, int iRight)
  MYLIBAPI int Sub (int iLeft, int iRight)
  Dll.cpp
  #define MYLIBAPI extern "C" _declspec (dllexport)
  #include "Dll.h"
  int Add (int iLeft, int iRight)
  {
  return iLeft + iRight ;
  }
  int Sub (int iLeft, int iRight)
  {
  return iLeft - iRight ;
  }
  保存文件。
  在Project->setting->link 最下面加上 “/dll”, "/"之前一定要与前一项
  有空格。
  然后编译,就可以在debug 或 release下面找到dll 和 lib 文件了
  使用的时候包含dll.h文件
  方法二:使用def文件
  建立一个console application, 建立2个文件dll.h 和 dll.cpp
  Dll.h
  int Add (int iLeft, int iRight) ;
  int Sub (int iLeft, int iRight) ;
  Dll.cpp
  #include "Dll.h"
  int Add (int iLeft, int iRight)
  {
  return iLeft + iRight ;
  }
  int Sub (int iLeft, int iRight)
  {
  return iLeft - iRight ;
  }
  然后再当前目录下面建立一个.def文件,文件名最好和要输出的dll名字一样,扩展名
  为.def, 里面写上:
  LIBRARY dllname.dll
  EXPORTS
  Add @1
  Add @2
  然后将这个文件添加到工程中,
  在link中设置 /dll, 然后编译
  在debug或release中就可以找到dll和lib了
  使用的时候加上dll.h文件
分享到:
评论

相关推荐

    sqlite在VC6下面的DLL与LIB文件

    sqlite3在vc6下面使用的dll与lib文件,已经完全验证过,请放心使用

    libmysql的dll与lib.zip

    Mysql32位与64位dll与lib文件 libmysql.dll libmysql.lib

    编译好的libtiff dll与lib (32位与64位)

    编译好的libtiff dll与lib (32位与64位) ; 注意使用时,对应的dll lib 与四个头文件 要匹配 不然可能会出现问题

    libtiff dll与lib(32位与64位)可直接加载使用

    已经编译好的libtiff库,包括dll、lib、.h可直接调用使用,32位及64位均已编译完成

    dll to lib 3.00 本人汉化版

    dll to lib 3.00 本人在破解版的基础上汉化 未汉化二进制里的字符串,使用ok

    Dll2Lib 3.0

    Dll2Lib 3.0 Welcome to DLL to Lib. DLL to Lib is a magical tool which can convert a DLL file into its equivalent static library file so that you can distribute your applications without the DLLs.

    通过DLL生成LIB

    最近遇到需要修改LIB名称的事,想着重新编译LIB需要编译大半天实在太耗时间了,所以自己写了个软件,只需要将DLL改个名字重新生成LIB即可,已通过测试,仅支持支持VS C/C++平台的动态链接库,自动识别X86还是X64平台...

    DLL转Lib工具

    DLL2Lib,编程高手必备工具,值得拥有。

    dll导出lib工具

    C99没法在VC下直接编译,利用mingw+msys先生成dll,然后dll导出lib 如果不会用,请看http://blog.sina.com.cn/u/1964716381

    Qt5.13.1串口Bug问题解决readyRead信号触发问题的dll与lib文件.7z

    分别将文件夹中的bin文件夹中的dll,和lib文件夹中的文件 对应复制覆盖到:Qt安装目录下(以默认路径为例),解决Qt5.13.1中QSerialPort 模块中 ReadyRead信号不触发的问题。 C:\Qt\Qt5.13.1\5.13.1\mingw73_64 ---...

    dll和lib的区别

    dll和lib的区别

    dll文件转换为lib

    使用pexport和lib工具将dll转换为lib。

    dll2lib.rar (需要安装 python2.X )

    压缩包中除上述网址的dll2lib.py外还含有 VC 6 的如下几个文件: DUMPBIN.EXE LIB.EXE LINK.EXE MSPDB60.DLL 该python脚本对一个 A.dll 文件会生成如下三个文件: A.lib A.def A.exp 因为是 python 写的,所以需要...

    DLL2LIB.zip

    DLL生成LIB的工具箱。里面包含两个工具,一个工具快速生成DEF和LIB文件,另一个工具修改LIB文件的函数命名方式。

    gdal和geos联合编译后dll和lib文件

    gdal和geos联合编译后dll和lib文件。gdal如果不与geos一起联合编译,gdal功能中的一些空间分析功能将无法使用,联合编译是一件很费劲的事情,资源中是已经联合编译好的库文件。

    dll转lib的方法总结

    曾经有个项目需要把开发出的DLL转成lib发给客户,这个是当时的经验总结,在这里分享给大家,希望可以帮到大家。

    Dll2Lib.exe

    VC++ 和 C++Builder 的链接器在链接 DLL 时需要导入库(Import Library),在有些情况下,只能得到 DLL 文件,而没有导入库文件(比 如用 Delphi 开发的 DLL),使用这个工具可以方便的生成 DLL 对应的 导入库和模块...

    从dll导出lib库

    从dll导出lib库 从dll导出lib库从dll导出lib库从dll导出lib库从dll导出lib库

    dll2lib dlltolib转换工具

    dll 到 lib 转换工具 还不错,挺好用的

Global site tag (gtag.js) - Google Analytics