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