编译C++生成DLL遇依赖缺失与JNA调用错误的解决求助
问题解决方案
1. 处理ext-ms-win-oobe-query-l1-1-0.dll依赖缺失问题
- 原因:你代码中包含了
<iostream>头文件,即便没实际使用,编译器仍会链接C++标准库的动态版本,间接引入了该系统组件依赖。 - 解决方法:
- 删除代码里的
#include <iostream>,你的函数不需要输入输出功能,完全可以移除。 - 修改编译命令,静态链接C++标准库与gcc运行库,避免依赖系统动态库:
g++ -shared -static-libstdc++ -static-libgcc -o Te.dll Te.cpp - 无需手动下载缺失的DLL,这是Windows系统组件,强行下载替换可能引发兼容性问题,静态链接即可彻底解决依赖问题。
- 删除代码里的
2. 修复JNA调用的java.lang.UnsatisfiedLinkError: %1 is not a valid Win32 application异常
- 原因:编译生成的DLL与运行Java程序的JVM位数不匹配(比如32位DLL用64位Java调用,或反之)。
- 解决方法:
- 确认g++是64位版本:执行
g++ -v,查看输出的target字段,若包含x86_64-w64-mingw32则为64位。 - 确认Java环境是64位:执行
java -version,输出中会明确标注64-Bit。 - 用64位g++重新编译DLL,再用64位Java运行程序,保证两者位数一致即可解决该错误。
- 确认g++是64位版本:执行
内容的提问来源于stack exchange,提问作者powerfulH
相关产品推荐
相关产品推荐

