关于windows 静态动态库 还有编译选项的一些问题
来源:互联网 发布:东北大学软件学院教师 编辑:程序博客网 时间:2024/06/07 08:39
首先静态动态库这个就不需要讲很多了,静态库编译连接的时候需要,运行时不需要,但运行程序就相对较大;而动态库一般都是有lib 和dll的 用于链接之后,运行的时候需要dll的支持,运行程序会相对较少。虽然静态库看起来是比较整洁,但是其实没有必要每次都需要使用自己的静态库,比如多个进程的时候,会存在重复的多个静态库代码,占用内存。 动态库在载入时有两种,静态动态,也就是载入的时机不同,一个是程序开始的时候全载,但初始化就慢一点;一个是运行时载,但运行是性能就慢一点。
然后其实出现的问题实在编译选项这里,主要是qt的qt库其实是一个运行时动态链接的库,然后使用的静态库选择了运行时的静态链接。这个之后说了,所以当程序里出现不同的运行时库选项时就会有问题出现。下面贴一个说明先:
http://www.cnblogs.com/Frodo/archive/2008/02/04/1064267.html
在Windows下有六种类型CRTLib(C运行库):
Reusable Library Switch Library Macro(s) Defined
----------------------------------------------------------------
Single Threaded /ML LIBC (none)
Static MultiThread /MT LIBCMT _MT
Dynamic Link (DLL) /MD MSVCRT _MT and _DLL
Debug Single Threaded /MLd LIBCD _DEBUG
Debug Static MultiThread /MTd LIBCMTD _DEBUG and _MT
Debug Dynamic Link (DLL) /MDd MSVCRTD _DEBUG, _MT, and _DLL
MT和MD都适用于多线程,其区别是:
MT为静态链接CRT,这样编译出来exe是自包含的,所以会相对大一些,但运行时不用再load CRT库。
MD为动态链接CRT,编译出来exe会小一些,运行时需要load CRT,性能有一点点损失。
任何工程都应该使用同样的CRT Library。即要么都是/ML,要么都是/MTD, 如此类推。
当工程比较大,包含的lib很多,特别当有外部lib(Third party library)存在时,link很容易发生下面这样的错误。
LIBCMTD.lib(chsize.obj) : error LNK2005: __chsize already defined in MSVCRTD.lib(MSVCRTD.dll)
这说明,你的工程使用了不同类型的CRT。这个时候首先一定要坚信这个原则:整个工程用同样的CRT Lib就可以解决问题。然后耐心一一检查每个lib。
如果恰恰某个外部lib用MT,另一个用MD,这个时候就比较痛苦。
如果有他们源码,就编译一个MT or MD类型的lib,以统一使用一个类型CRT。
如果没有,那可能只好选择其他的lib。
- 关于windows 静态动态库 还有编译选项的一些问题
- 关于 J2Objc 编译静态库的一些问题记录
- VC动态库,静态库编译选项的使用
- VC动态库,静态库编译选项的使用
- windows下编译成功,但是还有一些问题?
- 关于VS动态库和静态库编译问题
- 关于共享库 与静态库还有动态库的 使用说明
- windows下 静态/动态库的一些总结
- 关于js选项卡的一些问题
- qt5 编译一些问题 还有打包的dll依赖
- 关于编译优化选项o3的问题
- 关于编译优化选项o3的问题
- Linux编译选项&静态库和动态库
- 关于静态库和动态库的一些理解
- 关于动态库静态库的一些事
- 关于windows下编译Qt mysql库一些小问题的解决
- 编译静态库遇到的一些问题speex,opus
- Qt静态编译的一些问题
- openstack icehouse部署学习笔记
- Ubuntu14.04软件安装的问题
- 50道Java习题之13
- 规定自己的Java编码规范
- POJ1005解题报告
- 关于windows 静态动态库 还有编译选项的一些问题
- 原声JS瀑布流加延迟加载
- oc中实例变量的三种可见度/oc中的方法
- MessagePack, Protocol Buffers和Thrift序列化框架原理和比较说明
- java代码 解析EXCEL(三)
- Xcode iOS开发BUG记录:Undefined symbols for architecture i386 / duplicate symbol _OBJC_CLASS_
- 费用报销过程中可能存在的问题
- 仿酷狗音乐播放器开发日志十五——音乐电台列表控件的实现
- iOS notes about url