【发布时间】:2010-08-16 16:39:28
【问题描述】:
我收到一条错误消息,提示“应用程序无法正确启动 (0xc000007b)。单击确定关闭应用程序。”当我尝试运行使用 Visual Studio 2005 编译的程序时。
当我在这个可执行文件上运行“依赖”的 Windows 程序时,我看到了大量的 DLL,它们被列为“x86”dll。这些似乎都是 OS dll(位于 c:\windows\system32 目录中)。 “取决于”在描述架构的地方将它们列为红色,因为我正在制作 AMD64 二进制文件。一些 DLL(我从源代码编译的 QT dll)被列为 AMD64。
我尝试在“c:\windows\system32”之前将“c:\windows\SysWOW64”添加到我的路径并重建我的应用程序。在我看来,这就像这些 DLL 的 64 位版本所在的位置。这仍然会收到相同的失败消息。我的项目设置为构建为 x64 项目。在我的项目 -> 属性 -> 链接器 -> 高级 -> 目标机器下,我尝试了“MachineX64”和“未设置”。当我尝试运行我的可执行文件时,这两个设置都会在运行时产生相同的错误消息。
我对在 windows 环境中构建软件不是很了解。我的大部分经验来自 Linux。对我来说,这似乎是一个 DLL 架构问题,但我不确定。谷歌搜索这条错误消息并没有为我提供太多有用的信息。提供的任何帮助将不胜感激。我刚开始一份新工作,在实际运行我们的代码时似乎遇到了很多很多问题......
非常感谢您花时间阅读我的问题,
-布莱恩·J·斯蒂纳尔-
首先,非常感谢您向我提供反馈。
'set' 为我提供了以下信息,我相信这些信息将有助于回答您的一些问题。由于我对 Windows 系统管理不是很熟悉,如果您认为我应该运行任何其他命令来为您提供更多有用的信息,请告诉我。我认为与“set”相关的输出如下:
LIBVERSION=win64
PROCESSOR_ARCHITECTURE=AMD64
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 26 Stepping 5, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=1a05
在我的系统属性下,我发现以下值有助于澄清我的情况:
Windows 7
处理器:Intel(R) Xeon(R) CPU W3530 @ 2.80GHz 2.79 GHz
系统类型:64位操作系统
我不完全确定我理解 x64 和 ia64 之间的区别,但据我了解,ia64 是针对我没有的安腾类处理器的。我相信我有一个 x64 处理器。这是根据阅读帖子上的
http://mikedimmick.blogspot.com/2006/03/whats-difference-between-x64-and-ia-64.html
至强处理器属于 x64 类别。我不确定我是否理解 AMD64 如何适应这一点。
我是否应该有要链接的 AMD64 DLL,如果我实际上有 Intel Xeon 芯片,我的程序是否应该列出 CPU 类型 AMD64?
再次感谢您的帮助,
-布莱恩·J·斯蒂纳尔-
【问题讨论】:
-
根据平台SDK的err.exe,0xC000007b是STATUS_INVALID_IMAGE_FORMAT(或ERROR_INVALID_NAME)。所以是的,听起来像是一个架构问题。您肯定在 64 位 Windows 上运行?你不是在混淆 x64 和 ia64 吗?
标签: windows dll visual-studio-2005 linker