将使用VS 2005编译的静态库(.lib)与使用VS 2008编译的程序链接是否正确?库和我的程序都是用C ++编写的。此程序在Windows Mobile 6 Professional模拟器上运行。
这似乎有效,没有链接错误。但是程序在启动期间崩溃,因为链接库中发生了奇怪的事情。例如。 lib可以返回大负数字符的字符向量。
使用VS 2005编译程序时没有这样的问题。
更奇怪的是,问题仅在于为构建使用发布配置时。使用调试配置进行编译时,不会出现问题。
答案 0 :(得分:11)
VS2005和VS2008使用不同的STL实现。当VS2005代码返回向量时,该对象的内存布局与VS2008所期望的不同。这应该是您在返回日期中看到的值损坏的原因。
根据经验,您应该始终使用相同的编译器编译项目的所有C ++模块,并且所有设置/ #define equal。
导致类似行为的一个特定#define是VS2008的SECURE_SCL #define。使用不同设置编译的两个模块将完全解决您的问题,因为#defining SECURE_SCL将更多成员变量引入各种C ++库类。
答案 1 :(得分:2)
以您描述的方式链接到较旧的库并不是错误的,但是我看到一些奇怪的行为并不令我感到惊讶。夫妻健全检查:
当你说.LIB时,你的意思是真正的静态库(mylib.lib)还是DLL的导入库(mylib.lib - > mylib.dll)?
VS2008可执行项目的编译/链接设置是什么?
答案 2 :(得分:0)
添加:与Timbo has pointed out一样,VS 2005和VS 2008使用不同的STL实现。但是,如果还安装了VS 2005,则可以使用VS 2008根据旧的STL进行构建:
在VS 2008中打开您的库项目。
转到工具>选项>项目和解决方案> VC ++目录
在顶部的下拉菜单中选择您的设备平台。
更改从VS9到VS8文件夹的路径。
这样,您可以使用VS 2008构建与VS 2005一起使用的库。(对我有用)