关于release和debug版本不能混用的教训

之前改老师写好的MFC的一个图像类的lib库,重新生成之后,调用lib的项目一直报错。错误如下:

图片描述

大致就是检测到lib文件里各种.obj不匹配。

找了蛮久问题,后来发现是版本不兼容的问题。
vs中的工程有debug和release两个版本,我的lib库项目用debug版本编译,调用的项目是用release版本编译的。

需要强调一下:

静态链接库的生成与使用需要用相同版本。

为什么呢?
Debug和Release的本质区别其实就是两者编译的方式不同。
很明显的外在表现就是Debug版本的静态链接库一般会比Release版本的大不少。

打个比方,就像ANSI和Unicode,都能表示汉字,但编码方式不同,不能用ANSI修改Unicode编码。

两者详细一点的区别可以往下看↓:

1. Debug通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,但是不做任何优化(性能有影响),目的是为开发人员提供强大的应用程序调试能力,也就是说只有在Debug模式下,我们才可以使用vs所提供的所有的程序调试功能,比如:单步调试中将光标移至变量处即可以获取该变量的实时数据。

2. Release通常称为发布版本,是为用户使用的,一般客户不允许在发布版本上进行调试,在Release模式下也无法使用vs所有的调试功能。所以不保存调试信息,同时,它往往进行了各种优化,以期达到代码最小和速度最优。为用户的使用提供便利。

关于变量的初始化
  debug跟release在初始化变量时所做的操作是不同的,debug是将每个字节位都赋成0xcc, 而release的赋值近似于随机。如果你的程序中的某个变量没被初始化就被引用,在release版本下就很有可能出现异常:用作控制变量将导致流程导向不一致;用作数组下标将会使程序崩溃;更加可能是造成其他变量的不准确而引起其他的错误。

从Debug模式改为Release模式:
- 改为Release模式之后,Debug下的工程设置不会直接copy过来,需要针对当前工程重新设置一次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值