[英]Stack overflow before debugging main function in amd64
我有几个依赖的工作32位应用程序。 依赖关系的大致估算如下:
[handshake_win32.exe] ----> [libhandshake32.dll] ----> [libeay32,ssleay32.dll] ----> [zlib1.dll]
现在,我想通过JNI使用libhandshake32.dll进行代码重用。 由于JVM是64位的,因此我猜想需要为x64 arch重新编译这些库。
我的第一个目标是在x64中运行当前的基线handshake_win32.exe。 因此,我已经为x64重新编译了所有dll。 但是,当成功重新编译后,当我开始进入调试模式时,主要功能立即得到堆栈溢出。
handshake_win32.exe中0x000007f602f79567的未处理异常:0xC00000FD:堆栈溢出。
我试图用dumpbin检查dll签名,并且似乎所有机器都具有x64机器类型。 依赖关系行者为所有x64模块给出以下错误消息-
错误:由于隐式相关模块中缺少导出功能,因此至少一个模块的导入无法解析。 错误:找到了具有不同CPU类型的模块。
它显示已加载x86版本的MSVCR100.dll,而实际dll的目录是x64。
谁能建议这个问题的可能原因是什么?
提前致谢。
1,如果使用cmd / bat编译dll,请按以下方式启动cmd / bat:
%comspec% /k ""PATH_TO_VS\VC\vcvarsall.bat"" amd64
要么
%comspec% /k ""PATH_TO_VS\VC\vcvarsall.bat"" x86_amd64
代替:
%comspec% /k ""PATH_TO_VS\VC\vcvarsall.bat"" x86
2,如果使用gui,最好检查一下命令行:
c/c++->command line
linker->command line
有时,当您在vs gui中更改配置时,命令行不会更改,您最好开始一个新项目并在其中复制您的源文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.