2011-09-06 144 views
5

我有一个exe文件取决于libeay32.dll。两者都编译为32位。Windows 7 64位不正确PATH当加载32位库的32位exe

我已将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未找到的错误。

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

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

为什么心不是窗户寻找32个库? 如果目录已经在路径上,为什么没有解决图书馆?

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

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

任何想法将不胜感激。

编辑:

程序将其正确启动/从开始菜单 - >程序完成时,但不能直接在该.exe ...... WTF执行?

使用procmon中似乎试图打开(注意缺少““): ”C:\ Program Files文件(x86)的\ MYAPP \第三方\ OpenSSL的\ LIBEAY32.DLL“ 但在其路径正确(复查: “C:\ Program Files文件(x86)的\ MYAPP \第三方\ OpenSSL的”)

ANSWER?: 是有诀窍的场景/臭虫设置“C:\ Program Files文件(86) “在路径上,导致Windows试图加载”C:\ Program Files文件(x86)“,而不是 ????(请参阅使用procmon没有任何过滤器)

Windows 7 x64错误?

+0

据我所知,只查找PATH查找EXECUTABLE。一个Lib或DLL无法自行执行 - 只能支持另一个可执行文件。 – Arun

+2

@Arun - Windows确实使用路径来定位DLL的。请参阅http://msdn.microsoft.com/en-us/library/7d83bc18.aspx – shf301

+0

我的不好,我收回。是的,它确实。非常感谢您纠正我的错误! – Arun

回答

0

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