Windows 7 64位系统在加载32位exe的32位库时路径不正确。

5
我有一个依赖于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未找到的错误。
使用32位的依赖项查看器,库位于C:\ Program Files(x86)\ app \ lib。 使用Sysinternal进程资源管理器,应用程序被正确执行。 使用cmd也可以。 使用64位的依赖项查看器,我可以看到缺少的库。 将这两个文件一起复制或将dll复制到syswow64也完美地解决了问题。
如果应用程序是为32位编译的...
为什么Windows没有寻找32位库? 如果目录已经在路径中,为什么库不能被解析?
我猜w7忽略了路径,但根据这个链接: http://msdn.microsoft.com/en-us/library/ms682586%28v=vs.85%29.aspx 不应该这样做! 为什么我不能运行我的exe并且依赖项位于路径上? 我需要注册库或其他东西吗? 任何想法都将不胜感激。 编辑: 当从开始菜单->程序启动/执行该程序时,程序是正确的,但不是直接在.exe上...什么鬼? 使用procmon似乎正在尝试打开(请注意缺少“”): "C:\ Program Files(x86)\ myapp \ Third-Party \ openssl \ LIBEAY32.dll" 但在路径中它是正确的(重新检查:“C:\ Program Files(x86)\ myapp \ Third-Party \ openssl”) 答案?: 是否有已知的情况/错误,其中在路径上设置“C:\ Program Files(x86)”会导致Windows尝试加载“C:\ Program Files(x86)”而不是“C:\ Program Files(x86)”???(请参见使用没有任何过滤器的procmon) Windows 7 x64错误?

据我所知,PATH仅用于查找可执行文件。库或DLL本身无法执行 - 只能支持另一个可执行文件。 - Arun
2
@Arun - Windows使用路径来定位DLL。请参见http://msdn.microsoft.com/en-us/library/7d83bc18.aspx。 - shf301
我的错,我收回。是的,没错。非常感谢您纠正我的错误! - Arun
不要复制文件,而应使用regsvr(32)注册文件libeay32.dll。我假设Windows会自动加载库。 - Nick Binnet
2
@Nick,regsvr32 用于COM注册 - 除非dll是一个导出“DllRegisterServer”和“DllUnregisterServer”的COM组件,否则它将会失败。 - Justin
显示剩余5条评论
1个回答

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接