我收到一条错误消息“应用程序无法正常启动(0xc000007b)。单击”确定“关闭应用程序。”当我尝试运行我用Visual Studio 2005编译的程序时。
当我运行Windows程序“依赖”这个可执行文件时,我看到一个列为“x86”dll的DLL的TON。这些似乎都是OS dll(位于c:\ windows \ system32目录中)。 “Depends”将这些列为红色描述架构,因为我正在制作AMD64二进制文件。一些DLL(我从源代码编译的QT dll)被列为AMD64。
我尝试在“c:\ windows \ system32”之前将“c:\ windows \ SysWOW64”添加到我的路径并重建我的应用程序。这看起来像这些DLL的64位版本所在的位置。这仍然会收到相同的失败消息。我的项目设置为构建为x64项目。在我的项目下 - >属性 - >链接器 - >高级 - >目标机器,我已尝试“MachineX64”和“未设置”。当我尝试运行可执行文件时,这两个设置在运行时都会导致相同的错误消息。
我不太了解在Windows环境中构建软件。我的大多数经验来自Linux。对我来说,这似乎是一个DLL架构问题,但我不确定。 Google提供此错误消息并未向我提供有用的信息。我们非常感谢您提供的任何帮助。我刚开始一份新工作,看起来我在实际运行代码时遇到了很多问题...
非常感谢你花时间阅读我的问题,
-Brian J. Stinar -
首先,非常感谢您提供反馈意见。
'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
处理器:英特尔(R)Xeon(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
Xeon处理器属于x64类别。我不确定我是否理解AMD64如何适应这一点。
我是否应该使用我要链接的AMD64 DLL,如果我实际拥有Intel Xeon芯片,我的程序是否应该列出CPU类型AMD64?
再次感谢您的帮助,
-Brian J. Stinar -
答案 0 :(得分:1)
SysWOW64是32位DLL存在于64位系统上的地方。 ('WOW'是'Windows On Windows',例如64位窗口上的32位Windows DLL,因此SysWOW64是Windows上的'Sys'tem文件夹在Windows64上'通常,程序运行时操作会在Windows自动重定向到此处在64位安装上检测32位图像。
我同意Rup - 听起来你的图像是为不同的架构而不是你正在运行的。
答案 1 :(得分: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