繁体   English   中英

在amd64中调试主要功能之前出现堆栈溢出

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM