我在 Windows(64 位)上使用 GCC 标志 -c 和 -o Name.dll 编译了本机 DLL 文件。
当我执行 System.load("fullpahhere") 时,我收到此错误:
java.lang.UnsatisfiedLinkError: RenderControl.dll: %1 is not a valid Win32 application
如果我重新编译将空白 main() 方法添加到 C 源代码并删除 -c 标志,则它会失败并出现 UnsatisfiedLinkError ,表示它无法在 64 位机器上加载 32 位 DLL。
为什么Java调用没有main方法的DLL无效?这不会破坏 DLL 文件和 JNI 的全部意义吗?
更新
我修复了 main() 问题。此 GCC 调用设置有效:
gcc -Wall -D_JNI_IMPLEMENTATION_ -Wl,--kill-at -I "C:\Program Files\Java\jdk1.6.0_32\include" -I "C:\Program Files\Java\jdk1.6.0_32\include\win32" -shared *.c -o lib.dll
但是,我仍然需要弄清楚 JVM 架构问题。
我在哪里可以找到能够编译 64 位代码的 MinGW 安装?看来我的标准 MinGW 安装只支持 32 位。
如果我能掌握它,我如何决定在 Java 中加载哪个库?是否有显示JVM 拱门(而不是操作系统拱门)的系统属性?