【问题标题】:What makes a C++ program be 64-bit only or machine-restricted?是什么让 C++ 程序仅限 64 位或受机器限制?
【发布时间】:2014-02-03 02:43:15
【问题描述】:

我如何知道我用 C++ 编写的程序能否在 32 位操作系统中正常运行?
(无需手动测试)

我正在使用 Visual Studio 并在 64 位机器上进行编译。这会阻止程序在其他机器上运行吗?

那么处理器和 Windows 版本呢?如果程序只做一些简单的事情,例如 Web 请求和计算,使用简单的用户界面,二进制文件是否与大多数 Windows 版本和处理器兼容?

我的程序不必是 64 位的。我只想创建一个可以在大多数计算机上运行的二进制文件,就像我每天在 Internet 上下载的那些。我怎么能这样做?

【问题讨论】:

  • 您是在询问二进制文件是否可以在 32 位 Windows 上运行,或者是否可以针对 32 位 Windows 重新编译源代码并预期可以工作?
  • 我在问二进制文件是否会在 32 位上运行。我会编辑我的问题。感谢您的评论。
  • @NunoPeralta:不会。编译器会生成机器指令。这些显然是平台相关的。您知道您的程序是否与 x86 兼容,因为那是(或不是)您在构建它时所针对的架构。
  • 谢谢@EdS。所以如果我将它构建为 32 位,它最有可能在大多数计算机上工作吗?
  • 您还需要考虑架构,例如,如果您使用 AVX2 为 Intel Haswell 构建代码,但希望它在 95% 没有 AVX2 指令的计算机上运行。我觉得这个问题太宽泛了,因为它要求理解软件分发中的很多概念。

标签: c++ windows processor


【解决方案1】:

为 64 位编译和链接的可执行文件通常还需要 64 位库。

使用Dependency Walker 之类的工具来查明给定的可执行文件是引用 32 位还是 64 位库。

Visual Studio 中,“目标平台”决定了您的目标 CPU 架构。在 32 位系统上创建 64 位可执行文件是完全可行的,但您实际上无法在这样的机器上运行它们。

【讨论】:

    【解决方案2】:

    您可以执行所谓的交叉编译,即在一台机器上为另一台机器编译。 How to compile a 32-bit binary on a 64-bit linux machine with gcc/cmake 如果我没看错,这就是你所追求的。应该有一个 Windows 等价物。

    【讨论】:

      【解决方案3】:

      如果您专门为 64 位 Windows 构建代码,则不能指望二进制文件在 32 位 Windows 上运行。这将需要单独构建。

      【讨论】:

      • 谢谢。但是,这是否意味着我必须获得一台 32 位机器并在那里编译我的代码,或者我可以在同一台机器上这样做吗?我的程序不必是 64 位的。我只想创建一个可以在大多数计算机上运行的二进制文件,就像我每天在 Internet 上下载的那些。我怎么能这样做?
      • 如果您的应用程序不需要 64 位,只需在 64 位窗口上创建一个 32 位应用程序即可。
      • @NunoPeralta:64 位 Windows 机器可以编译和运行 32 位代码。 32位Windows机器可以编译64位代码,但不能运行。
      猜你喜欢
      • 2012-01-30
      • 1970-01-01
      • 2013-09-19
      • 2016-02-12
      • 2023-04-07
      • 2017-04-07
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多