草庐IT

c++ - vs2012 工具集兼容性

coder 2024-01-31 原文

在我的 VS2012 中,我有 4 个可用的工具集:v90、v100、v110 和 v110_xp。我用两个项目 teSTLib(静态库)和 testexe(控制台应用程序)做了一个简单的测试。该接口(interface)只是一个带有签名的函数 void test() .结果:

  • teSTLib(v90), testexe(v90 以外的任何东西) -> 不链接
  • teSTLib(v100), testexe(v110 or v110_xp) -> 链接

但是,我觉得 v100 和 v110 会链接起来有点奇怪,所以我试着让场景复杂一点。现在我的方法是这样的:std::map<std::string, std::string> test(const std::string& arg) .正如预期的那样,teSTLib(v100) 和 testexe(v110) 没有链接(mismatch detected for '_MSC_VER')。

但 teSTLib(v110) 和 testexe(v110_xp) 仍然链接并且生成的 exe 可以在 Windows XP 上运行。这只是偶然还是受支持的情况?如果这只是偶然,那么欢迎使用仅使用 v110_xp 中可用功能并破坏此兼容性的示例代码。我想知道我是应该将我的库的两个版本部署到我的客户端,还是只部署一个使用 v110 编译的版本。

最佳答案

“工具集”一词在描述 v110 和 v110_xp 之间的差异时有点用词不当。您仍在使用相同的构建工具。而且您仍然拥有相同版本的 CRT。通过比较在两个构建之间加载的 DLL 的调试 + Windows + 模块列表中看到的内容,您可以看到一些内容。记下 msvcr110.dll 的名称和位置。

CRT 实际上是由 Update 1 更新的,它现在支持 XP 和更新的 Windows 版本。这是通过它在运行时使用 GetProcAddress() 动态绑定(bind)到后来的 winapi 函数来实现的,如果在 XP 上运行时找不到它们,它就会一瘸一拐地走下去。

不同之处在于您获得了另一个版本的 Windows SDK。最后一个仍然与 XP 7.1 兼容的版本。您会在 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A 中找到它。当您使用 v110 工具集构建时,您将使用存储在 C:\Program Files (x86)\Windows Kits\8.0 中的 SDK 包含文件和库文件

当您在 c:\program files (x86)\msbuild 目录中搜索该字符串时,可以看到使用 v110_xp 时的具体更改:

  • include 和 lib 文件等的目录更改为 Windows 7.1 SDK 路径
  • 添加了 _USING_V110_SDK71_ 预处理器符号,未在其他任何重要地方使用
  • 链接器的/SUBSYSTEM 选项已更改为仅需要 Windows 版本 5.02,即 XP 版本号。

长话短说,混合使用 v110 和 v110_xp 工具集构建的模块不是问题。

关于c++ - vs2012 工具集兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14426198/

有关c++ - vs2012 工具集兼容性的更多相关文章

  1. ruby-on-rails - Railstutorial : db:populate vs. 工厂女孩 - 2

    在railstutorial中,作者为什么选择使用这个(代码list10.25):http://ruby.railstutorial.org/chapters/updating-showing-and-deleting-usersnamespace:dbdodesc"Filldatabasewithsampledata"task:populate=>:environmentdoRake::Task['db:reset'].invokeUser.create!(:name=>"ExampleUser",:email=>"example@railstutorial.org",:passwo

  2. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  3. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  4. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  5. ruby - 使用 `+=` 和 `send` 方法 - 2

    如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:

  6. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  7. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  8. ruby - 如何计算 Liquid 中的变量 +1 - 2

    我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

  9. ruby-on-rails - 有没有一种工具可以在编码时自动保存对文件的增量更改? - 2

    我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功

  10. arrays - Ruby 数组 += vs 推送 - 2

    我有一个数组数组,想将元素附加到子数组。+=做我想做的,但我想了解为什么push不做。我期望的行为(并与+=一起工作):b=Array.new(3,[])b[0]+=["apple"]b[1]+=["orange"]b[2]+=["frog"]b=>[["苹果"],["橙子"],["Frog"]]通过推送,我将推送的元素附加到每个子数组(为什么?):a=Array.new(3,[])a[0].push("apple")a[1].push("orange")a[2].push("frog")a=>[[“苹果”、“橙子”、“Frog”]、[“苹果”、“橙子”、“Frog”]、[“苹果”、“

随机推荐