lib和dll的区别与联系
2016-05-10 14:45
281 查看
在用sql connector c++时,同时到了mysqlcppconn.lib和mysqlcppconn.dll两个文件,一时竟说不出它们的区别。。
(1)lib是编译时用到的,dll是运行时用到的。如果要完成源代码的编译,只需要lib;如果要使动态链接的程序运行起来,只需要dll。
(2)如果有dll文件,那么lib一般是一些索引信息,记录了dll中函数的入口和位置,dll中是函数的具体内容;如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。使用静态编译的lib文件,在运行程序时不需要再挂动态库,缺点是导致应用程序比较大,而且失去了动态库的灵活性,发布新版本时要发布新的应用程序才行。
(3)动态链接的情况下,有两个文件:一个是LIB文件,一个是DLL文件。LIB包含被DLL导出的函数名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到DLL文件。在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中相应函数代码的地址,从而节省了内存资源。DLL和LIB文件必须随应用程序一起发行,否则应用程序会产生错误。如果不想用lib文件或者没有lib文件,可以用WIN32 API函数LoadLibrary、GetProcAddress装载。
静态链接的lib就没有dll文件,lib包含函数代码本身,在编译时直接将代码加入程序当中
(1)lib是编译时用到的,dll是运行时用到的。如果要完成源代码的编译,只需要lib;如果要使动态链接的程序运行起来,只需要dll。
(2)如果有dll文件,那么lib一般是一些索引信息,记录了dll中函数的入口和位置,dll中是函数的具体内容;如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。使用静态编译的lib文件,在运行程序时不需要再挂动态库,缺点是导致应用程序比较大,而且失去了动态库的灵活性,发布新版本时要发布新的应用程序才行。
(3)动态链接的情况下,有两个文件:一个是LIB文件,一个是DLL文件。LIB包含被DLL导出的函数名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到DLL文件。在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中相应函数代码的地址,从而节省了内存资源。DLL和LIB文件必须随应用程序一起发行,否则应用程序会产生错误。如果不想用lib文件或者没有lib文件,可以用WIN32 API函数LoadLibrary、GetProcAddress装载。
静态链接的lib就没有dll文件,lib包含函数代码本身,在编译时直接将代码加入程序当中
相关文章推荐
- java日志记录之Logger.getLogger()和LogFactory.getLog()的区别
- linux下FFmpeg编译生成ffplay
- linux下FFmpeg编译生成ffplay
- LayoutAnimation和LayoutTransition
- .net关于嵌套类的一个用处
- decimalFormat
- linux下FFmpeg编译生成ffplay
- 第一节 junit
- ant教程详解 javac java jar war delete copy mkdir move
- [并查集] hihocoder 1158 质数相关
- Linux CentOS 中安装 MySql
- linux下FFmpeg编译生成ffplay
- 最简化模型——css3分阶段动画效果(经过实测)
- gdb watch point
- 课外小发现
- Delphi Dll插件窗体中遇到的各种问题
- linux下ffmpeg安装
- linux下ffmpeg安装
- 【bzoj 2060】[Usaco2010 Nov]Visiting Cows 拜访奶牛
- Android实现跑马灯效果的TextView