本来在DEBUG下运行的非常好,可是换成release后就出现了各种的内存读写错误,话说在DEBUG下,没有初始化的变量都被初始化为零了,而在RELEASE下则是随机数值,然后就各种查找错误,最后看到把动态链接库改成静态链接库,我就试了一下,终于行了,哎,不得不说WINDOWS啊你不地道。。。
网上查了一下静态链接库和动态链接库的区别,我简单总结一下:
1、如果是静态链接库模式,程序是把目标代码从库文件拷贝到执行文件,这样在DLL不在的情况下,程序依旧可以运行,动态则是运行过程中加载,前提是你要有DLL可以提供加载
2、明显静态模式下最终程序要大,而动态要小
遗憾地说:除了ender说的是正确的外,其他观点都有偏颇之处甚至是错误的。我的感觉是,大家受MFC的影响太深了,而没有看到事情的本质。
首先纠正所谓“静态连接就是把需要的库函数放进你的exe之中”的说法。在真实世界中,有三个概念:Use static libary, static linked DLL, dynamic linked DLL.
多数人混淆了static libary 和 static linked DLL的概念,当然他们有似是而非的“相似之处”,比如都用到.lib,下面具体说明。
使用静态库(Use static libary)是把.lib和其他.obj一起build在目标文件