【问题标题】:Building a correctly linked executable to avoid error 0xc000007b构建正确链接的可执行文件以避免错误 0xc000007b
【发布时间】:2013-05-10 15:18:36
【问题描述】:

我正在使用 VS 2012 的默认构建设置构建一个 32 位可执行文件。它可以在一台 64 位计算机(开发机器)上正常工作;在另一台 64 位计算机上,程序崩溃并出现错误 0xc000007b。

稍作研究并使用依赖项遍历器表明问题在于可执行文件正在加载 64 位 dll 而不是 32 位 dll。

我有理由确定这可以通过将构建配置为静态链接所需代码而不是调用 DLL 来解决。

1)。这个解决方案是一个相当正确和可移植的解决方案吗?

2)。如何将 VS 2012 配置为如上所述静态链接?

注意:这是一个 C++ 原生程序。

【问题讨论】:

  • 64 位 DLL 不会从天而降。您需要明确说明它的来源以及为什么该机器没有该 DLL 的 32 位版本。
  • 如果一切(当然除了操作系统本身)都是静态链接的,这确实是一个正确且可移植的解决方案。但是,如果您需要链接到第三方 DLL,而这些 DLL 本身依赖于动态链接运行时库,那么这种方法将不起作用。在这种情况下,您需要在目标机器上安装正确版本的运行时库。
  • @HarryJohnston:在我的具体情况下实际上不是问题。但很高兴知道下一个人有这个问题!

标签: windows visual-studio-2012 32bit-64bit


【解决方案1】:

虽然这本身不是上述“相当正确和可移植”问题#1 的答案,但我从How do I make a fully statically linked .exe with Visual Studio Express 2005? 找到了#2 的答案。如果编译器 /MD 选项更改为 /MT,它会从链接到 DLL 切换到静态链接,问题就会消失[1]。

[1]。问题消失了并不意味着问题就解决了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    • 2016-09-12
    • 2013-06-24
    • 2012-10-14
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多