12

在将 Visual 2012 C++ 项目迁移到目标 64 位平台时,我们是否应该将预处理器定义从 WIN32 更改为 WIN64。

现在我已经用以下设置构建了项目

  • MACHINE(指定目标平台)设置为/MACHINE:X64

  • 目标环境设置为/env x64

  • 在 C/C++ 项目设置 -> 代码生成,结构成员对齐到 8 个字节

请指导我还有哪些项目设置应该改变。

4

3 回答 3

8

需要注意的是,只有这些预处理器定义的下划线版本与 32 位和 64 位机器之间的区别有关。

下划线版本 _WIN32 和 _WIN64 是内置的,与运行 VC++ 的计算机的实际物理 CPU 相关。在 32 位机器上,总是会定义 _WIN32(用户不需要定义),但不会定义 _WIN64。在 64 位机器上,总是会定义 _WIN64,也可以定义 _WIN32,但代码可以依赖 _WIN64 来确定机器是否为 64 位。

对于 Visual Studio 2019(可能还有其他 VS 版本):

非下划线 WIN32 没有很好的文档记录,并且似乎与 32 与 64 机器类型无关。Windows 的标准 Visual C++ 项目通常似乎不使用它(它可能根本没有使用)。感谢 BTJ 提出这一点。

Visual Studio 的另一个注意事项:如果您在 64 位计算机上运行 Visual Studio 并选择 Win32 与 x64 构建配置,您会注意到 WIN32 是为 Win32 构建配置定义的,但不是为 x64 构建配置定义的。这不会影响对象/二进制机器目标,例如 32 与 64。其目的尚不清楚。如果希望使用它来#ifdef 源代码的某些部分,这些部分将针对 X86 和 X64 进行不同的编译,这可能是为了方便,但同样,它与编译器所针对的体系结构无关。对于编译器,目标体系结构由基于所选项目目标“平台”选择的工具集确定。链接器还有 /MACHINE arg 例如 /MACHINE:X86。

于 2018-08-04T05:53:35.393 回答
4

您的意思是 _WIN32 和 _WIN64 宏吗?如果您正确指定了所有参数(请参阅 PS),则无需更改代码。在 64 位解决方案中必须同时定义 _WIN32 和 _WIN64。_WIN32 宏指定您可以使用 Win32 API,_WIN64 宏指定编译为 64 位模式。您也可以为 Itanium (_M_IA64) 和 x86-64 (_M_AMD64) 使用不同的宏。请参阅MSDN中的详细信息。

PS你是手动选择平台参数的吗?您可以通过 VS 指定它:

  1. 构建菜单 -> 配置管理器。
  2. 在活动解决方案平台中选择新建。
  3. 键入或选择新平台 -> x64,然后单击确定。
  4. 现在在“平台”行中,您可以简单地选择 x64。
于 2013-07-02T06:36:11.907 回答
0

至少在 VS2015 中,链接器/所有选项/目标机

这假设您在尝试构建 x64 时未使用配置为使用 x86 代码或构建为 32 位的第 3 方工具(例如小部件支持或硬件驱动程序),反之亦然

于 2021-09-08T03:06:22.640 回答