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 535进程间通信 2011年01月01日 1、共享内存 ... -
perl学习笔记16--Web自动化和连网
2012-01-20 10:27 498perl学习笔记16--Web自动 ... -
select, poll区别及使用
2012-01-20 10:27 679select, poll区别及使用 2011年05月10日 ... -
apache1.3.39源码alloc.c阅读笔记
2012-01-20 10:27 494apache1.3.39源码alloc.c阅读笔记 2011 ... -
Web安全漏洞之:JDK1.5环境下扫描远程调试端口导致JVM崩溃【JDWP exit error JVMTI_ERROR_NONE(0)】
2012-01-20 10:27 665Web安全漏洞之:JDK1.5环境 ... -
Windows环境下设置Qt编译环境 - 关于Qt的静态链接库的配置和生成方法
2012-01-19 15:27 971Windows环境下设置Qt编译环境 - 关于Qt的静态链接库 ... -
Platform Builder和Embedded visual C++简介
2012-01-19 15:27 692Platform Builder和Embedded vis ... -
基于Windows CE的激光切割机开放式数控系统的研究
2012-01-19 15:27 536基于Windows CE的激光切割 ... -
windows 系统Android模拟器联网设置
2012-01-19 15:27 823windows 系统Android模拟器联网设置 2011年 ... -
WMI(Windows管理规范)常见问题解答
2012-01-19 15:27 481WMI(Windows管理规范)常见 ... -
最美的烟火(小说)
2012-01-17 05:14 839最美的烟火(小说) 7小 ... -
我的日志
2012-01-17 05:14 440我的日志 7小时前 在座的所有人g8孢淇,腈萘ノ ... -
建筑施工扣件式钢管模板支架技术规程
2012-01-17 05:14 1433建筑施工扣件式钢管模板支架技术规程 7小时前 《建筑 ... -
壮壮说,你听下吧
2012-01-17 05:14 773壮壮说,你听下吧 7小时 ... -
最后的一封遗书、含恨而终!
2012-01-17 05:14 577最后的一封遗书、含恨而终! 7小时前 这次割腕现在谁 ... -
2010-11-3
2012-01-16 04:06 5152010-11-3 2010年11月03日 作者:不详 ... -
[整理]关于在ASP.net项目中使用ActiveX控件的问题
2012-01-16 04:06 1185[整理]关于在ASP.net项目 ... -
Web开发流程规范的五个要点
2012-01-16 04:06 630Web开发流程规范的五个要点 2010年01月17日 开 ... -
jsj
2012-01-16 04:06 546jsj 2010年10月14日 vb是Visual Ba ...
相关推荐
《MySQL的libmysql.dll与lib文件详解》 MySQL是一款广泛使用的开源关系型数据库管理系统,其在Windows平台上的运行离不开特定的动态链接库(DLL)和库文件(LIB)。本篇文章将详细探讨“libmysql.dll”和“libmysql...
"libtiff dll与lib(32位与64位)可直接加载使用" 这个标题表明这是一个关于libtiff库的资源包,包含了用于不同操作系统位宽(32位和64位)的动态链接库(dll)和静态链接库(lib)文件,可以直接在程序中调用,无需...
**编译好的libtiff DLL与lib:32位与64位详解** 在软件开发过程中,库文件(如.lib和.dll)是至关重要的组成部分,它们提供了预编译的函数和类供应用程序调用,以实现特定的功能。libtiff是一个开源的库,专门用于...
本篇文章将详细探讨如何在VC6下使用SQLite的动态链接库(DLL)和库文件(LIB)。 1. **SQLite DLL文件**:DLL是Dynamic Link Library的缩写,是Windows操作系统中的一种共享库文件。在VC6项目中,如果你选择使用...
该压缩包中包含了一系列与DLL转Lib相关的辅助文件: 1. **dump.bat**:这是一个批处理文件,可能包含了自动执行DLL2Lib工具的命令行指令,简化转换过程。 2. **dumpbin.exe**:这是Microsoft Visual Studio附带的一...
这篇教程将深入探讨如何在DLL中调用LIB,并介绍与VC++(Visual C++)相关的实现细节。 首先,理解DLL的基本概念至关重要。DLL是一种可执行文件,它包含可由多个程序同时使用的函数和资源。当一个应用程序需要使用...
DLL文件允许多个程序共享同一段代码和数据,从而节省系统资源,而LIB文件则是与DLL相配合,提供了链接器所需的信息,使得程序在编译时能够正确调用DLL中的函数。 "DLL2LIB.zip" 是一个专门用于处理DLL和LIB之间关系...
在Windows操作系统中,DLL文件是包含可由多个程序共享的函数和资源的库,而LIB文件则供编译器在链接阶段使用,以便将函数调用与对应的代码连接起来。这个转换过程对于某些开发情境非常有用,例如当开发者希望在不...
《DLL导出LIB工具详解与应用》 在Windows操作系统中,动态链接库(Dynamic Link Library,简称DLL)是一种可执行文件格式,它包含了可供其他程序调用的函数和数据。DLL有助于减少内存占用,便于代码共享,是软件...
dll to lib 3.00 本人在破解版的基础上汉化 未汉化二进制里的字符串,使用ok
《DLL与LIB的区别及其在软件开发中的应用》 在计算机编程领域,DLL(Dynamic Link Library)和LIB(Library)是两种常见的库文件类型,它们在软件构建和运行中发挥着关键作用。理解它们的区别和使用场景,对于优化...
在编程领域,DLL(Dynamic Link Library)和LIB(Library)都是Windows操作系统中常见的库文件类型,它们各有不同的用途。DLL是一种动态链接库,它包含可由多个程序共享的代码和数据,有助于节省内存和磁盘空间。而...
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.
在给定的文件列表中,`mspdb120.dll`通常与Visual Studio的C++编译器相关,可能是调试库的一部分;`link.exe`是Visual Studio的链接器,用于构建可执行文件或库;`pexports.exe`就是上面提到的导出DLL函数的工具;`...
最近遇到需要修改LIB名称的事,想着重新编译LIB需要编译大半天实在太耗时间了,所以自己写了个软件,只需要将DLL改个名字重新生成LIB即可,已通过测试,仅支持支持VS C/C++平台的动态链接库,自动识别X86还是X64平台...
《32位libiconv1.15:DLL与LIB库的详解与应用》 libiconv是一款广泛使用的字符集转换库,它提供了一种在不同字符编码之间进行转换的方法,使得程序能够在处理多语言环境时更加灵活。在这个主题中,我们将深入探讨32...
- **调试与分析**:转换为LIB有助于在没有源代码的情况下理解或调试DLL中的函数。 描述中提到“还不错,挺好用的”,这表明该工具在实际使用中表现良好,易于操作,能够有效地完成DLL到LIB的转换。 使用`dll2lib....
libcurl-vc-x64-release-dll-zlib-dll-ipv6-sspi-schannel.zip zlib_x64.zip libcurl-vc-x86-release-dll-zlib-dll-ipv6-sspi-schannel.zip zlib_x86.zip ssl_x64.zip 可解压出curl openssl zlib的windows 32位及64...