关于Visual C ++:VS 2005和2008库链接

关于Visual C ++:VS 2005和2008库链接

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 ++库类引入了更多成员变量。


以您描述的方式链接到较旧的库并不是不正确的,但这也不足为奇,您会看到一些奇怪的行为。夫妻健康检查:

  • 两个文件是否使用相同版本的相同运行时库?
  • 您的.EXE应用程序是否"看到"了针对.LIB生成的相同头文件?确保正确声明了_WIN32_WINNT(等)宏。

当您说.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一起使用的库。(对我有用)。


    推荐阅读

      linux编译源代码命令?

      linux编译源代码命令?,工具,代码,百度,最新,环境,项目,系统,电脑,密码,内核,l

      linux编译时显示命令?

      linux编译时显示命令?,系统,基础,工具,代码,百度,下来,网上,命令,内核,文件,L

      linux重新链接库命令?

      linux重新链接库命令?,代码,软件,平台,产品,电脑,系统,入口,市场,工业,通信,l

      linux运行vim命令?

      linux运行vim命令?,系统,工具,官方网站,模式,基础,数据,代码,环境,入口,命令

      linux监控命令运行?

      linux监控命令运行?,系统,工作,地址,信息,工具,情况,标准,环境,命令,状态,lin

      linux链接远程命令?

      linux链接远程命令?,系统,地址,网络,密码,软件,名称,工具,服务,电脑,认证,如

      linux自动运行命令?

      linux自动运行命令?,服务,系统,时间,代码,周期性,第一,命令,管理,在线,状态,l

      linux开启运行命令?

      linux开启运行命令?,系统,服务,工作,管理,状态,命令,标准,情况,环境,工具,lin

      linux运行wps命令?

      linux运行wps命令?,软件,官网,名称,时间,电脑,系统,工具,环境,项目,数据,wps

      linux命令行链接网络?

      linux命令行链接网络?,网络,系统,地址,工作,工具,最新,网址,数据,信息,环境,l

      linux运行cmd命令?

      linux运行cmd命令?,电脑,系统,状态,情况,环境,命令,单位,管理,设备,数据,电脑

      linux编译连接命令?

      linux编译连接命令?,系统,代码,环境,工具,文件,资料,电脑,百度,终端,命令,在l

      linux运行两个命令?

      linux运行两个命令?,网络,地址,系统,工作,暂停,命令,网站,密码,网上,入口,Lin

      linux动态链接库命令?

      linux动态链接库命令?,代码,项目,工程,电脑,网上,文件,程序,静态,命令,目录,

      linux命令运行代码?

      linux命令运行代码?,代码,单位,系统,环境,连续,保险,工具,命令,文件,音乐,Lin

      linux内核编译命令?

      linux内核编译命令?,系统,软件,环境,电脑,内核,最新,下来,官网,体系,名字,在l

      linux命令运行脚本?

      linux命令运行脚本?,代码,系统,工作,设计,状态,命令,脚本,文件,目录,终端,运

      linux上运行的命令?

      linux上运行的命令?,系统,工作,软件,网络,地址,信息,情况,命令,灵活,基础知

      linux取消链接命令行?

      linux取消链接命令行?,工具,状态,环境,数据,命令,文件,终端,模式,指令,界面,l

      linux怎么运行命令?

      linux怎么运行命令?,系统,工作,首页,工具,终端,地址,命令,信息,电脑,情况,怎