2008-09-08 79 views
4

将使用VS 2005编译的静态库(.lib)与使用VS 2008编译的程序链接是否正确?库和我的程序都是用C++编写的。该程序在Windows Mobile 6 Professional模拟器上运行。VS 2005&2008链接库

这似乎工作,没有链接错误。然而,程序在启动过程中会崩溃,因为奇怪的事发生在链接库中。例如。 lib可以返回大负数的字符向量。

当程序被编译与VS 2005

什么是更奇怪的使用发布配置生成,只有当这个问题是有没有这样的问题。使用调试配置进行编译时,问题不会发生。

回答

11

VS2005和VS2008使用不同的STL实现。当VS2005代码返回一个向量时,该对象的内存布局与VS2008所期望的不同。这应该是您在返回日期中看到的损坏值的原因。作为一个经验法则,您应该始终使用相同的编译器编译项目的所有C++模块,并且所有设置/#定义相同。

导致类似行为的一个特定#define是VS2008的SECURE_SCL #define。使用不同设置编译的两个模块会创建您的问题,因为#定义SECURE_SCL为各种C++库类引入更多成员变量。

2

按照您描述的方式链接到较旧的库是不正确的,但是您不会感到惊讶,您会看到一些奇怪的行为。夫妇完整性检查:

  • 是否使用相同版本的相同的运行时库这两个文件?
  • 您的.EXE应用程序是否“看到”.LIB所针对的相同头文件?确保_WIN32_WINNT(等)宏是declared properly

当你说.LIB,你的意思是一个真正的静态库(mylib.lib)或DLL的导入库(mylib.lib - > mylib.dll)?

什么是您的VS2008可执行项目的编译/链接设置?