我有一个工作的 32 位应用程序有几个依赖项。对依赖关系的粗略估计如下 -
[handshake_win32.exe] ----> [libhandshake32.dll] ----> [libeay32, ssleay32.dll] ----> [zlib1.dll]
现在我想通过 JNI 使用我的 libhandshake32.dll 进行代码重用。由于 JVM 是 64 位的,所以我猜这些库需要为 x64 架构重新编译。
我的第一个目标是在 x64 中运行当前的基线 handshake_win32.exe。所以我已经为x64重新编译了所有的dll。但是在我开始进入调试模式时成功重新编译后,我在主函数中立即得到堆栈溢出。
handshake_win32.exe 中 0x000007f602f79567 处未处理的异常:0xC00000FD:堆栈溢出。
我试图用 dumpbin 检查 dll 签名,它似乎都有机器类型 x64。依赖 walker 为所有 x64 模块提供以下错误消息 -
错误:由于隐式依赖模块中缺少导出函数,至少一个模块具有未解析的导入。错误:发现具有不同 CPU 类型的模块。
它表明 x86 版本的 MSVCR100.dll 在实际 dll 的拱门为 x64 的位置加载。
谁能建议这个问题的可能原因是什么?
提前致谢。