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

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

关于release和debug版本不能混用的教训_第1张图片

大致就是检测到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过来,需要针对当前工程重新设置一次。

你可能感兴趣的:(vs2015)