代码之家  ›  专栏  ›  技术社区  ›  Brian Stinar

x86 AMD64 DLL问题-Visual Studio 2005?

  •  0
  • Brian Stinar  · 技术社区  · 14 年前

    我收到一个错误,上面写着“应用程序无法正确启动(0xC0000007B)”。单击“确定”关闭应用程序。“当我尝试运行用Visual Studio 2005编译的程序时。

    当我在这个可执行文件上运行windows程序“depends”时,我看到了大量被列为“x86”DLL的DLL。这些似乎都是OS DLL(位于c:\windows\system32目录中)。”“depends”将这些列为红色,用于描述体系结构,因为我正在生成AMD64二进制文件。一些DLL(我从源代码编译的qt dll)被列为AMD64。

    我尝试将“c:\windows\sysw64”添加到“c:\windows\system32”之前的路径并重新构建应用程序。在我看来,这就像64位版本的这些DLL的所在。这仍然会收到相同的失败消息。我的项目设置为作为x64项目生成。在我的项目->属性->链接器->高级->目标计算机下,我尝试了“machinex64”和“not set”。当我尝试运行可执行文件时,这两个设置都会在运行时产生相同的错误消息。

    我对在Windows环境中构建软件不是很了解。我的大部分经验来自Linux。在我看来,这似乎是一个DLL体系结构问题,但我不确定。谷歌的这个错误信息并没有给我提供很多有用的信息。如有任何帮助,我们将不胜感激。我刚开始了一份新工作,在实际运行我们的代码时似乎遇到了很多问题…

    非常感谢你花时间来阅读我的问题,

    -布莱恩·J·斯蒂纳-

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

    “set”向我提供了以下信息,我相信这些信息将有助于回答您的一些问题。由于我不熟悉Windows系统管理,请告诉我是否还有其他命令您认为我应该运行以向您提供更有用的信息。我认为与“set”相关的输出如下:

    libversion=win64

    处理器_架构=AMD64

    处理器标识=Intel64系列6型号26步进5,GenuineIntel

    处理器级别=6

    处理器版本=1A05

    在我的系统属性下,我发现以下值有助于澄清我的情况:

    视窗7

    处理器:Intel(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吗?

    再次感谢您的帮助,

    -布莱恩·J·斯蒂纳-

    2 回复  |  直到 14 年前
        1
  •  1
  •   DaveE    14 年前

    SysWow64是32位DLL驻留在64位系统上的地方。('wow'是“Windows上的Windows”,例如64位Windows上的32位Windows DLL,因此Sysww64是“Windows64上的Windows系统文件夹”)通常,当检测到64位安装上的32位映像时,Windows会自动将程序运行时操作重定向到此处。

    我同意RUP——听起来你的图像是为不同于你运行的架构而构建的。

        2
  •  0
  •   Brian Stinar    14 年前

    有两个DLL不正确。这些是:

    libifcoremdd.dll文件 LBMMDD.DLL

    今天我和一个同事一起处理这个问题,他从一个他知道很好的地方复制了它们。当我早些时候和一个不同的同事一起工作时,我们从一个不同的地方复制了它们,结果发现这是错误的。

    另外,如果其他人也有类似的问题,

    dumpbin /headers DLLName 
    

    将提供有关您正在使用的DLL的大量有用信息。我不太清楚这些不同的DLL之间有什么区别(在检查之前,我重写了旧的DLL)。如果我对这个问题做更多的分析,我会把结果贴在这里。我怀疑DLL是x86或IA64,而不是我需要的X64 DLL。

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

    谢谢大家!

    -布莱恩·J·斯蒂纳-

    brian-stinar.blogspot.com网站