【问题标题】:Compiling 32-bit application using Visual Studio on a 64-bit machine在 64 位机器上使用 Visual Studio 编译 32 位应用程序
【发布时间】:2011-10-25 02:24:58
【问题描述】:

我正在尝试在全新安装的 Windows 7 的 64 位机器上使用 Visual Studio 2010 编译一个用 C 语言编写的简单 32 位 Hello World 应用程序。安装 Visual Studio 后,我还安装了“Windows SDK for Windows 7 and .NET Framework 4”。 我构建了选择“Win32”作为平台的应用程序。它可以在 Windows 7 上运行,但如果我在我的 32 位计算机上使用 Windows XP Professional 运行该应用程序(全新安装,没有软件和服务包),似乎无法收到此错误:

"This application has failed to start because msvcr100.dll was not found"

如果它有用 Dependency Walker 检测到 2 个错误(详情请参阅链接图片):

"Error: At least one module has an unresolved import due to a missing export function in an implicitly dependent module."
"Error: Modules with different CPU types were found."

http://img820.imageshack.us/img820/4725/errordp.png(图片)

我该如何解决?谢谢!

【问题讨论】:

    标签: c visual-studio visual-studio-2010 32bit-64bit


    【解决方案1】:

    运行它的机器需要运行时库。看到这个MSDN information

    【讨论】:

      【解决方案2】:

      不要相信 Dependency Walker... 它清楚地表明您的 exe 是 32 位的。您的问题在于 VC 可再发行组件,即 CRT dll - 在您的 VS 安装中查找 vcredist_x86.exe。您应该在运行应用程序之前运行它。

      另一种选择是静态链接 CRT。请参阅/MT option。会让你的 exe 变大,但保存 vcredist 的东西。

      【讨论】:

      • 我设置了/MT选项,但是这次我得到“程序入口点解码指针不能位于动态链接库kernel32.dll”为什么?
      • @Lorenzo,从 XP SP2 开始支持 DecodePointer。使用 /MT 编译只会让您更进一步,这是您的问题的阶段......动态链接会导致同样的问题。要么compile to the basic version of XP,要么更新XP。
      • 好的,谢谢@eran,还有一个小问题:为什么在这样的情况下我不必信任 Dependency Walker?这些错误是什么意思?
      • @Lorenzo,dependency walker 获得了正确的依赖关系,但由于某些原因,它有时会出错。不知道为什么会这样,但它是一个相当老的工具(认为仍然非常有用),而且它似乎没有维护这些天......
      【解决方案3】:

      这里的问题是编译程序使用的 C 运行时在 Windows XP 机器上缺失。默认情况下,Visual Studio 2010 将使用 10.0 (msvcr100.dll) 运行时,默认情况下在 XP 上不可用。您需要在您的机器上手动部署 C 运行时才能运行您的程序。

      您可能需要阅读以下 MSDN 文章,该文章讨论了有关部署使用 Visual Studio 2010 构建的 C 应用程序的问题

      工作中可能还有其他 32 / 64 个问题,但这似乎是主要问题

      【讨论】:

        【解决方案4】:

        关于运行时库的答案是正确的。另一种可能的解决方案是链接到静态运行时库,而不是链接到 DLL 版本。通过这种方式,您可以构建一个可执行文件,您可以将其放到任何机器上,而无需额外的部署麻烦。

        这是一种权衡,但是,在不了解您的情况的情况下,可能值得考虑。

        【讨论】:

          猜你喜欢
          • 2016-05-17
          • 1970-01-01
          • 2012-01-18
          • 2011-01-30
          • 1970-01-01
          • 2018-09-20
          • 2013-03-20
          • 2014-07-01
          • 1970-01-01
          相关资源
          最近更新 更多