【问题标题】:windows 7 64 bits incorrect PATH when loading 32 bits library for 32 bits exe为 32 位 exe 加载 32 位库时,Windows 7 64 位路径不正确
【发布时间】:2011-11-11 12:03:39
【问题描述】:

我有一个依赖于 libeay32.dll 的 exe。两者都编译为 32 位。

我已将 exe 复制到 C:\Program files (x86)\app\bin 并将 dll 复制到 C:\Program files (x86)\app\lib。 为确保正常工作,我已将 C:\Program files (x86)\app\lib 添加到路径中。

在 Windows 7 64 位上,当我执行 exe 时,出现 libeay32.dll not found 错误。

使用 32 位依赖遍历器,该库正确位于 C:\Program files (x86)\app\lib。 使用 sysinternal 进程资源管理器,应用程序可以正确执行。 使用 cmd 也可以。 使用 64 位的依赖walker,我可以看到缺少的库。 将这两个文件一起复制或将 dll 复制到 syswow64 也可以完美地工作。

如果应用程序是为 32 位编译的...

为什么 windows 不寻找 32 位库? 如果目录已经在路径上,为什么不解析库?

我的猜测是 w7 忽略了路径,但据此: http://msdn.microsoft.com/en-us/library/ms682586%28v=vs.85%29.aspx 它不应该!。

为什么我不能在路径上运行依赖项的 exe? 我应该注册图书馆还是什么?

任何想法将不胜感激。

编辑:

从开始菜单->程序完成时,程序正确启动/执行,但不是直接在 .exe...wtf 上?

使用 procmon 似乎是在尝试打开(注意缺少“”): “C:\Program Files(x86)\myapp\Third-Party\openssl\LIBEAY32.dll” 但在路径中它是正确的(重新检查:“C:\Program Files (x86)\myapp\Third-Party\openssl”)

回答?: 是否有已知的场景/错误在路径上设置 “C:\Program Files (x86)”,导致窗口尝试加载“C:\Program Files(x86)”????(请参阅使用没有任何过滤器的 procmon)

Windows 7 x64 错误?

【问题讨论】:

  • 据我所知,PATH 仅用于查找可执行文件。 Lib 或 DLL 不能自行执行 - 只能支持另一个可执行文件。
  • @Arun - Windows 确实使用路径来定位 DLL。见msdn.microsoft.com/en-us/library/7d83bc18.aspx
  • 我的错,我收回。是的,它确实。非常感谢您纠正我的错误!
  • 您应该使用 regsvr(32) 注册文件 libeay32.dll,而不是复制文件。我假设 Windows 会自动加载库。
  • @Nick regsvr32 用于 COM 注册 - 除非 dll 是导出 DllRegisterServerDllUnregisterServer 的 COM 组件,否则只会失败。

标签: windows-7 path 32bit-64bit


【解决方案1】:

您可以将 lib 移动到同一目录中,因为它总是首先检查。如果找到,则使用它。 在 Windows 64 位系统上,您也可以(未尝试)将库移动到存储 32 位版本的 SystemWOW64 文件夹,但我会推荐第一个版本。

【讨论】:

    猜你喜欢
    • 2011-09-02
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 2010-09-16
    • 2013-06-11
    • 2016-01-29
    • 1970-01-01
    • 2014-01-12
    相关资源
    最近更新 更多