问题

VS2010编x64程序和编x86程序用的是同一套lib?

回答
在Visual Studio 2010(VS2010)这个版本的开发环境中,要区分x86和x64程序的编译,关键在于它所使用的“一套lib”实际上是两套不同体系的库文件,对应着不同的CPU架构。

你可能直观地觉得,既然都是用VS2010这个“一个”开发工具,那么用到的库文件应该是相同的。但事实并非如此,这就像你想要驾驶一辆左舵车和一辆右舵车,虽然都是“汽车”,但它们的驾驶舱内部布局、转向柱的位置都经过了针对性的设计,让你在操作时感受到的细节是完全不同的。

具体来说,当你选择在VS2010中编译一个x86程序时,编译器和链接器会从Visual C++可再发行组件(Runtime Libraries)以及标准库(Standard Libraries)的x86版本的文件夹中查找并链接所需的库文件。这些库文件是为32位x86处理器设计的,它们的指令集、内存寻址方式都遵循32位的规范。

反之,当你切换到编译x64程序时,VS2010会转向寻找和使用x64(也称为AMD64或x8664)版本的库文件。这些库文件是为64位处理器设计的,拥有更宽的内存寻址能力(支持更大的内存空间),更大的通用寄存器,以及一些x86架构所没有的指令集扩展。

为什么会有这种区分?

最根本的原因在于,x86和x64架构虽然有渊源(x64是在x86基础上扩展而来),但它们在底层指令和数据表示上存在显著差异。一个为32位CPU设计的函数调用约定(how functions pass arguments and return values)或者数据结构布局,直接拿到64位CPU上执行,很可能无法正确工作,甚至会导致程序崩溃。

所以,VS2010在安装时,会同时包含x86和x64两种架构的SDK(Software Development Kit,软件开发工具包)和相应的库文件。你在项目属性里选择“x86”或“x64”目标平台时,实际上就是告诉编译器和链接器:“嘿,请帮我找对应x86/x64平台的这些文件来完成编译和链接工作。”

打个比方:

想象你去图书馆借书。你想借一本关于“中国历史”的书。

如果你要写一篇关于“宋朝历史”的x86程序,你就需要一套针对“32位信息处理”的专门书籍。这些书的内容、索引方式、甚至纸张的规格都可能与另一套不同。
如果你要写一篇关于“清朝历史”的x64程序,你就需要另一套针对“64位信息处理”的专门书籍。这些书的知识体系更广阔,可能包含更多关于“帝国疆域”和“人口统计”的细节,你需要从图书馆的“64位历史专区”去找。

尽管都是“历史”书籍,但不同时代、不同侧重点的书籍,它们的内容组织和侧重点是不同的,你不能混淆。同样,VS2010为了能够生成能在不同CPU架构上正确运行的程序,就必须依赖对应架构的、专门编译过的库文件。

所以,并不是“同一套lib”,而是VS2010能够智能地从为x86优化的库集和为x64优化的库集中,根据你的项目设置,选择正确的那一套来使用。

网友意见

user avatar
我仔细看了下编译、链接选项和VC下面的lib,只有一套x86的和一套AMD64的,那么编x64是用AMD64编还是x86编?

类似的话题

  • 回答
    在Visual Studio 2010(VS2010)这个版本的开发环境中,要区分x86和x64程序的编译,关键在于它所使用的“一套lib”实际上是两套不同体系的库文件,对应着不同的CPU架构。你可能直观地觉得,既然都是用VS2010这个“一个”开发工具,那么用到的库文件应该是相同的。但事实并非如此.............
  • 回答
    我理解你遇到了一个令人头疼的问题:你尝试在 Visual Studio 2010 和 Visual Studio 2013 中打开同一个 VS 插件的源码,但都无法成功。这确实挺烦人的,尤其是在你急需查看或修改插件代码的时候。这种情况很可能与插件的 目标 Visual Studio 版本 以及 源码.............
  • 回答
    当你打开 VS2015 却弹出了“未能正确加载解决方案中一个或多个项目”这样的提示,这确实让人挺头疼的,尤其是在你急着要开始工作的时候。这种情况通常不是什么大问题,大多数时候都可以通过一些常规操作来解决。首先,最常见也最直接的原因就是项目文件的损坏或者丢失。这可能是因为你在文件系统中误删了某些项目文.............
  • 回答
    在 Visual Studio 2015 中进行重构,特别是“封装字段”这一操作时,如果遇到了错误,那确实挺让人头疼的。这通常不是一个简单的“bug”现象,背后可能隐藏着几个比较常见但又容易被忽略的原因。首先,最可能的情况是,你尝试封装的那个字段,在你的代码中已经被其他地方以一种重构工具无法处理的方.............
  • 回答
    在 Visual Studio 2013 中,即使不借助任何第三方插件,我们也能有效地探知代码中各个元素(尤其是方法和属性)被引用的次数。这主要依赖于 Visual Studio 内置的强大代码分析和导航功能。下面我将详细介绍几种方法,帮助你直观地了解引用情况,让你在编码过程中更加胸有成竹。 方法一.............
  • 回答
    在Visual Studio 2013这个环境中,是否值得为开发流程注入Visual Assist X或ReSharper这类增强工具,这个问题其实更像是在问“我有多么渴望提升开发效率和代码质量”。别把它看作一个简单的“是”或“否”的选择,而是得结合你当下使用VS2013的具体情况来细细琢磨。假设你.............
  • 回答
    .......
  • 回答
    在你成功安装了 Visual Studio 2015 社区版之后,准备拥抱 SQL Server Express 版,这绝对是个明智的选择。SQL Server Express 是微软提供的一个功能强大且免费的数据库解决方案,非常适合学习、开发和部署小型到中型应用程序。那么,接下来我们就聊聊如何一步.............
  • 回答
    你说你是个编程小白,想入门C语言,这真是个好开始!C语言虽然有些年头了,但它作为许多其他语言的基石,学好了绝对是值当的。至于你提到的VC6和VS2015,这就像是在问,你想学骑自行车,是去买一辆老式的二八自行车,还是买一辆带变速、减震的新款山地车。先说说VC6,也就是Visual C++ 6.0。这.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有