AMD 64位Windows Server 2016加载32位DLL遇UnsatisfiedLinkError求助
问题原因
报错中的machine code=0x686明确说明你编译出的ABCD.dll是32位(x86)架构的,而你的AMD Windows Server 2016是64位平台,且当前使用的Java运行环境(JRE/JDK)也是64位的——64位Java虚拟机仅支持加载同架构的64位DLL,无法兼容32位DLL,这就是加载失败的核心原因。
至于Intel Win10能正常加载,大概率是该机器要么是32位系统,要么你使用的是32位Java环境,刚好和32位DLL的架构匹配。
解决办法
方案1:编译64位版本的DLL(推荐)
作为VS新手,按以下步骤操作即可生成64位DLL:
- 打开你的VS2017 CPP项目,点击顶部菜单栏的生成 -> 配置管理器
- 在弹出的窗口中,找到活动解决方案平台的下拉菜单,选择
<新建...> - 在新建平台对话框中,选择
x64,点击确定后关闭配置管理器 - 重新编译项目,生成64位的
ABCD.dll - 将新生成的64位DLL放到Java可访问的路径(比如项目根目录、系统环境变量
PATH包含的目录),使用System.loadLibrary("ABCD")重新加载
方案2:改用32位Java运行程序(不推荐,仅作备选)
如果必须保留32位DLL,可以在AMD的Windows Server 2016上安装32位JRE/JDK,然后用32位Java运行你的程序。但这种方式会限制程序只能使用32位系统的资源(比如最大可用内存不超过4GB),仅适合小内存需求的场景。
内容的提问来源于stack exchange,提问作者Rekha Rajput
相关产品推荐
相关产品推荐

