1

我发现我可以在项目属性下选择目标机器。有一个很大的列表:

MachineX86 (/MACHINE:X86)
MachineAM33 (/MACHINE:AM33)
MachineARM (/MACHINE:ARM)
MachineEBC (/MACHINE:EBC)
MachineIA64 (/MACHINE:IA64)
MachineM32R (/MACHINE:M32R)
MachineMIPS (/MACHINE:MIPS)
MachineMIPS16 (/MACHINE:MIPS16)
MachineMIPSFPU (/MACHINE:MIPSFPU)
MachineMIPSFPU16 (/MACHINE:MIPSFPU16)
MachineMIPSR41XX (/MACHINE:MIPSR41XX)
MachineSH3 (/MACHINE:SH3)
MachineSH3DSP (/MACHINE:SH3DSP)
MachineSH4 (/MACHINE:SH4)
MachineSH5 (/MACHINE:SH5)
MachineTHUMB (/MACHINE:THUMB)
MachineX64 (/MACHINE:X64)

我有以下问题:

  1. 这个缩写是什么意思?
  2. 所需的硬件?
  3. 所需的软件和/或操作系统?
  4. 可以在 x86 系统上构建二进制文件吗?如果是,如何配置 Visual Studio 2008 Express?
  5. 如果对 x86、x64、安腾编译得很好,是否必须对代码进行任何更改?
4

2 回答 2

2

此设置用于配置编译源代码的 CPU 架构。根据您选择的架构,您将获得不同的二进制文件。

为特定 CPU 架构编译的二进制文件具有在加载到内存后 CPU 可以理解的结构。例如,有供 CPU 执行的命令和要加载的数据。

是否可以为不同的架构编译相同的源代码取决于您在做什么。您通常会没事的,但是通过执行数据大小敏感的事情、直接操作内存(取决于特定于体系结构的功能等)很容易破坏交叉兼容性。

此外,编写取决于特定操作系统中可用功能的代码也很容易。这与此设置没有直接关系,但当然,如果您正在调用例如仅在 PC 上可用的 Windows API 并尝试为 ARM 编译,它将不起作用 - 不会有任何库编译用于ARM,它定义了要链接的函数。

于 2013-12-10T22:32:32.667 回答
1

作为问题 1 的答案。
您可以在本书中找到常规机器类型首字母缩略词列表:“The Common Language Infrastructure Annotated Standard”,作者:James S. Miller,Susann Ragsdale,第 738 页。

+------------------------------+---------+------------------------------------------------+
| IMAGE_FILE_MACHINE_AM33      |  0x1d3  |  Matsushita AM33                               |
| IMAGE_FILE_MACHINE_AMD64     |  0x8664 |  AMD AMD64                                     |
| IMAGE_FILE_MACHINE_ARM       |  0x1c0  |  ARM, little endian                            |
| IMAGE_FILE_MACHINE_CEE       |  0xc0ee |  clr pure MSIL (object only)                   |
| IMAGE_FILE_MACHINE_EBC       |  0xebc  |  EFI Byte Code                                 |
| IMAGE_FILE_MACHINE_I386      |  0x14c  |  Intel 386 or later, and compatible processors |
| IMAGE_FILE_MACHINE_IA64      |  0x200  |  Intel IA64                                    |
| IMAGE_FILE_MACHINE_M32R      |  0x9041 |  Mitsubishi M32R, little endian                |
| IMAGE_FILE_MACHINE_MIPS16    |  0x266  |                                                |
| IMAGE_FILE_MACHINE_MIPSFPU   |  0x366  |  MIPS with FPU                                 |
| IMAGE_FILE_MACHINE_MIPSFPU16 |  0x466  |  MIPS16 with FPU                               |
| IMAGE_FILE_MACHINE_POWERPC   |  0x1f0  |  Power PC, little endian                       |
| IMAGE_FILE_MACHINE_POWERPCFP |  0x1f1  |  Power PC with floating point support          |
| IMAGE_FILE_MACHINE_R4000     |  0x166  |  MIPS, little endian                           |
| IMAGE_FILE_MACHINE_SH3       |  0x1a2  |  Hitachi SH3                                   |
| IMAGE_FILE_MACHINE_SH3DSP    |  0x1a3  |  Hitachi SH3 DSP                               |
| IMAGE_FILE_MACHINE_SH4       |  0x1a6  |  Hitachi SH4                                   |
| IMAGE_FILE_MACHINE_SH5       |  0x1a8  |  Hitachi SH5                                   |
| IMAGE_FILE_MACHINE_THUMB     |  0x1c2  |  Thumb                                         |
| IMAGE_FILE_MACHINE_WCEMIPSV2 |  0x169  |  MIPS WCE v2, little endian                    |
+------------------------------+---------+------------------------------------------------+

注意命名的区别:

 1. IMAGE_FILE_MACHINE_AMD64  ->  MachineX64
 2. IMAGE_FILE_MACHINE_I386   ->  MachineX86

虽然不确定您列表中的“MachineMIPSR41XX”

于 2018-11-01T22:37:37.073 回答