2010-08-16 63 views
0

我收到一个错误消息,说“应用程序无法正确启动(0xc000007b)。单击确定关闭应用程序。”当我尝试运行一个程序时,我用Visual Studio 2005进行了编译。x86 AMD64 DLL问题 - Visual Studio 2005?

当我运行windows程序“依赖”这个可执行文件时,我看到一个TON的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架构问题,但我不确定。 Google'这个错误信息并没有提供给我很多有用的信息。任何帮助提供将非常感激。我刚开始一个新的工作,看起来像我有很多很多的问题,当涉及到实际运行我们的代码...

感谢您百忙之中抽出时间来阅读我的问题,

-Brian J. Stinar-

首先,非常感谢您为我提供反馈。

'set'为我提供了以下信息,我相信这些信息可以帮助您回答一些问题。由于我对windows系统管理并不熟悉,请告诉我是否有其他命令,您认为我应该运行它来为您提供更多有用的信息。我相信输出是从 '设置' 相关的是以下:

中的libversion = Win64的

PROCESSOR_ARCHITECTURE = AMD64

PROCESSOR_IDENTIFIER = Intel64位家族6模型26步进5,GenuineIntel

PROCESSOR_LEVEL = 6

PROCESSOR_REVISION = 1a05

在我的系统属性下,我找到下面的值S的相信会有助于澄清我的情况:

Windows 7的

处理器:Intel(R)至强(R)CPU W3530 @ 2.80GHz的2.79 GHz的

系统类型:64位操作系统

我不完全相信我理解x64和ia64之间的区别,但据我所知,ia64是用于itanium类处理器的,我没有。我相信我有一个x64处理器。这是根据阅读

http://mikedimmick.blogspot.com/2006/03/whats-difference-between-x64-and-ia-64.html

至强处理器后落入64类。我不确定我是否理解AMD64如何适应这一点。

我是否应该连接AMD64 DLL,并且如果我实际上有英特尔至强芯片,我的程序是否应该列出CPU类型AMD64?

再次感谢你的帮助,

布赖恩J. Stinar-

+0

根据从平台SDK err.exe,0xC000007b是STATUS_INVALID_IMAGE_FORMAT(或ERROR_INVALID_NAME)。所以是的,听起来像是一个架构问题。你肯定在64位窗口上运行?你没有混合x64和ia64? – Rup 2010-08-16 16:44:32

回答

0

有两个DLL不正确。它们是:

libifcoremdd.dll libmmdd.dll

我今天对这个问题的一个同事工作,他复制了他们从他所知道的好位置。当我在一个不同的同事的早期工作时,我们从另一个地方复制了他们,结果证明这是不正确的。

此外,如果其他人是否有类似的问题,

dumpbin /headers DLLName 

会给很多关于你正在使用的DLL文件的有用信息。我不确定这些不同的DLL之间有什么区别(我在检查之前覆盖了旧的DLL)。如果我对这个问题做了额外的分析,我会在这里公布结果。我怀疑DLL是x86或ia64,而不是像我需要的x64 DLL。

什么是在Windows环境下打包和移动DLL这样的最佳解决方案?只是将它们复制到我的路径中的目录似乎不是最好的解决方案。

非常感谢大家!

-Brian J. Stinar-

brian-stinar.blogspot.com

1

Syswow64资料就是32位DLL住在64位系统上。 ('WOW'是'Windows在Windows上',例如在64位窗口上的32位窗口DLL,所以SysWOW64是'在Windows64上用于Windows的系统文件夹')通常,程序运行时操作在Windows中会自动重定向在64位安装中检测到32位图像。

我同意Rup--听起来像你的图像是为不同的体系结构构建的,而不是你正在运行的。

+0

你好, 谢谢你为我澄清SysWOW64。我正在慢慢成为一名Windows程序员。 您是否有任何建议确保我的图像(以及所有支持的DLL)是为Visual Studio 2005中的正确体系结构构建的?我相信这是一个DLL问题,但我不确定。 此外,我能够在发布模式下完美运行,但不能在调试模式下运行。这也使我相信其中一个调试DLL被错误地构建。 我的'解决方案'一直将我的构建环境改为虚拟机。显然,这并不理想。 再次感谢你,我很感激。 – 2010-08-24 14:47:31

+0

当您构建Debug时,您确定解决方案中的任何项目都没有将“x86”设置为架构吗?一切都应该作为你的目标架构或'任何CPU'运行,不要混合。 – DaveE 2010-08-24 16:14:41

+0

因为我指的是我的项目(DLL)以外的功能,我将来如何检查这个功能?我为x64设置了架构,但是我依赖的其他东西并不是以同样的方式构建的。我不知道检查这个的一般方法...谢谢! – 2010-09-07 18:21:49