【发布时间】: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 是导出
DllRegisterServer和DllUnregisterServer的 COM 组件,否则只会失败。
标签: windows-7 path 32bit-64bit