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。事实上,我们可以在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文件
参考文献:
《Windows核心编程》
《凌波微步-软件开发警戒案例集》
分享到:
相关推荐
H LIB DLL文件的区别月联系H LIB DLL文件的区别月联系H LIB DLL文件的区别月联系
用 VS2015 由 OpenCV 4.7.0 源码编译生成的 lib 和 dll 文件, 包含了 None free 模块, Opencv_Contrib-4.7.0. 不包含 Cuda
使用pexport和lib工具将dll转换为lib。
32位 opencv 3.4.1 lib和dll文件,官方源码下载编译而成,亲测可用
用 VS2015 由 OpenCV 4.3.0 源码编译生成的 lib 和 dll 文件, 包含了 None free 模块, 里面 txt 文档有头文件的说明
这里把所有的文件名列出来,有需要的就下吧: 2.0:lib:cv200.lib; cv200d.lib; cvaux200.lib; cvaux200d.lib; cxcore200.lib; cxcore200d.lib; cxts200.lib; cxts200d.lib; highgui200.lib; highguid.lib; ml...
64位win7系统下sqlite3的lib,dll文件,可用!
包括了各种学习OpenGL时要用的LIB、DLL文件及头文件
64位 opencv 3.4.1 lib和dll文件,release 版本,官方源码下载编译,亲测可用
opencv早期版本使用的库文件,搜集了Lib及Dll两类文件,包含cv200.lib,cv200d.lib,cxcore200.lib,cxcore200d.lib,highgui200.lib,highgui200d.lib等,cv100.dll,cv200.dll,cv200d.dll,cxcore200.dll,cxcore200d.dll,...
VS2015生成dll文件和lib文件,里面含有测试生成的lib文件和dll文件。具体怎么配置,请参考案例
vs2013使用tesseract时需要的include文件、Lib文件和dll文件
windows平台glut库,包含头文件,lib文件和链接库dll文件
(注意__cdecl和__stdcall调用约定的DEF文件书写区别。) 从DLL制作def文件: MinGW上的实现方法: pexports mydll.dll -o > mydll.def MSVC上的实现方法: 1. 制作一份dll的导出函数表,使用VC的dumpbin命令 ...
详细描述了vs2010下dll动态库的生成与使用方法,包括类的导出方法
openssl1.0.1e_x86_x64lib和dll文件, 安装编译一次比较麻烦,所以花点时间一次性做到位,制作了windows版本的32位和64位dll和lib库文件以及头文件,希望对大家有帮助.
简要介绍VC ++ 6.0环境中LIB与DLL文件的使用。
最全的opengl库文件,DLL文件,LIB文件。assimp/freeimage/glew/glfw/glm/glu32/glut/glut32/gltools/irrKlang/SOIL
opengl开发的头文件,lib文件和拓展库文件dll
gdal和geos联合编译后dll和lib文件。gdal如果不与geos一起联合编译,gdal功能中的一些空间分析功能将无法使用,联合编译是一件很费劲的事情,资源中是已经联合编译好的库文件。