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文件
发表评论
-
进程间通信
2012-01-20 10:27 524进程间通信 2011年01月01日 1、共享内存 ... -
perl学习笔记16--Web自动化和连网
2012-01-20 10:27 483perl学习笔记16--Web自动 ... -
select, poll区别及使用
2012-01-20 10:27 645select, poll区别及使用 2011年05月10日 ... -
apache1.3.39源码alloc.c阅读笔记
2012-01-20 10:27 484apache1.3.39源码alloc.c阅读笔记 2011 ... -
Web安全漏洞之:JDK1.5环境下扫描远程调试端口导致JVM崩溃【JDWP exit error JVMTI_ERROR_NONE(0)】
2012-01-20 10:27 653Web安全漏洞之:JDK1.5环境 ... -
Windows环境下设置Qt编译环境 - 关于Qt的静态链接库的配置和生成方法
2012-01-19 15:27 946Windows环境下设置Qt编译环境 - 关于Qt的静态链接库 ... -
Platform Builder和Embedded visual C++简介
2012-01-19 15:27 674Platform Builder和Embedded vis ... -
基于Windows CE的激光切割机开放式数控系统的研究
2012-01-19 15:27 525基于Windows CE的激光切割 ... -
windows 系统Android模拟器联网设置
2012-01-19 15:27 789windows 系统Android模拟器联网设置 2011年 ... -
WMI(Windows管理规范)常见问题解答
2012-01-19 15:27 466WMI(Windows管理规范)常见 ... -
最美的烟火(小说)
2012-01-17 05:14 822最美的烟火(小说) 7小 ... -
我的日志
2012-01-17 05:14 411我的日志 7小时前 在座的所有人g8孢淇,腈萘ノ ... -
建筑施工扣件式钢管模板支架技术规程
2012-01-17 05:14 1337建筑施工扣件式钢管模板支架技术规程 7小时前 《建筑 ... -
壮壮说,你听下吧
2012-01-17 05:14 750壮壮说,你听下吧 7小时 ... -
最后的一封遗书、含恨而终!
2012-01-17 05:14 545最后的一封遗书、含恨而终! 7小时前 这次割腕现在谁 ... -
2010-11-3
2012-01-16 04:06 5002010-11-3 2010年11月03日 作者:不详 ... -
[整理]关于在ASP.net项目中使用ActiveX控件的问题
2012-01-16 04:06 1157[整理]关于在ASP.net项目 ... -
Web开发流程规范的五个要点
2012-01-16 04:06 617Web开发流程规范的五个要点 2010年01月17日 开 ... -
jsj
2012-01-16 04:06 535jsj 2010年10月14日 vb是Visual Ba ...
相关推荐
sqlite3在vc6下面使用的dll与lib文件,已经完全验证过,请放心使用
Mysql32位与64位dll与lib文件 libmysql.dll libmysql.lib
编译好的libtiff dll与lib (32位与64位) ; 注意使用时,对应的dll lib 与四个头文件 要匹配 不然可能会出现问题
已经编译好的libtiff库,包括dll、lib、.h可直接调用使用,32位及64位均已编译完成
dll to lib 3.00 本人在破解版的基础上汉化 未汉化二进制里的字符串,使用ok
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.
最近遇到需要修改LIB名称的事,想着重新编译LIB需要编译大半天实在太耗时间了,所以自己写了个软件,只需要将DLL改个名字重新生成LIB即可,已通过测试,仅支持支持VS C/C++平台的动态链接库,自动识别X86还是X64平台...
DLL2Lib,编程高手必备工具,值得拥有。
C99没法在VC下直接编译,利用mingw+msys先生成dll,然后dll导出lib 如果不会用,请看http://blog.sina.com.cn/u/1964716381
分别将文件夹中的bin文件夹中的dll,和lib文件夹中的文件 对应复制覆盖到:Qt安装目录下(以默认路径为例),解决Qt5.13.1中QSerialPort 模块中 ReadyRead信号不触发的问题。 C:\Qt\Qt5.13.1\5.13.1\mingw73_64 ---...
dll和lib的区别
使用pexport和lib工具将dll转换为lib。
压缩包中除上述网址的dll2lib.py外还含有 VC 6 的如下几个文件: DUMPBIN.EXE LIB.EXE LINK.EXE MSPDB60.DLL 该python脚本对一个 A.dll 文件会生成如下三个文件: A.lib A.def A.exp 因为是 python 写的,所以需要...
DLL生成LIB的工具箱。里面包含两个工具,一个工具快速生成DEF和LIB文件,另一个工具修改LIB文件的函数命名方式。
gdal和geos联合编译后dll和lib文件。gdal如果不与geos一起联合编译,gdal功能中的一些空间分析功能将无法使用,联合编译是一件很费劲的事情,资源中是已经联合编译好的库文件。
曾经有个项目需要把开发出的DLL转成lib发给客户,这个是当时的经验总结,在这里分享给大家,希望可以帮到大家。
VC++ 和 C++Builder 的链接器在链接 DLL 时需要导入库(Import Library),在有些情况下,只能得到 DLL 文件,而没有导入库文件(比 如用 Delphi 开发的 DLL),使用这个工具可以方便的生成 DLL 对应的 导入库和模块...
从dll导出lib库 从dll导出lib库从dll导出lib库从dll导出lib库从dll导出lib库
dll 到 lib 转换工具 还不错,挺好用的