java - 在 Windows 上使用 JNI 从 Java 调用 Golang 导致 "A dynamic link library (DLL) initialization routine failed"

标签 java windows go java-native-interface mingw-w64

我创建了以下示例项目来测试使用 JNI 从 Java 调用 Golang 代码:https://github.com/blaubaer/golang-jni

当我调用 build.cmd 时,我收到如下错误消息:

Exception in thread "main" java.lang.UnsatisfiedLinkError: [...]\out\hello.dll: A dynamic link library (DLL) initialization routine failed
        at java.base/java.lang.ClassLoader$NativeLibrary.load0(Native Method)
        at java.base/java.lang.ClassLoader$NativeLibrary.load(ClassLoader.java:2430)
        at java.base/java.lang.ClassLoader$NativeLibrary.loadLibrary(ClassLoader.java:2487)
        at java.base/java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2684)
        at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2649)
        at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:829)
        at java.base/java.lang.System.loadLibrary(System.java:1867)
        at Hello.<clinit>(Hello.java:3)

使用环境:

  • Windows:10.0.17763,内部版本 17763,64 位
  • Go 语言:1.11.5,windows/amd64
  • Java:11.0.2 2019-01-15 LTS,64 位
  • MinGW-w64: x86_64-8.1.0-win32-sjlj-rt_v6-rev0

谢谢!

最佳答案

这似乎与 Golang 本身内部的一个错误有关。当前打开了一个合并请求 runtime: This change modifies Go to fix c-shared dll crash on x64 windows #30944我可以批准这将解决问题。

关于java - 在 Windows 上使用 JNI 从 Java 调用 Golang 导致 "A dynamic link library (DLL) initialization routine failed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54760090/

相关文章:

java - 使用单个 for 循环打印二维数组

java - 在Java中如何从匿名类外部访问变量

windows - __stdcall 没有任何修饰

windows - 用于验证 IIS 设置的 Powershell 脚本

docker - 从零开始的容器说明

java - BPMN 中信号事件和消息事件可以互换吗?

java - 在 liquibase CustomTaskChange 类中使用其他 spring bean

c++ - 在 Windows 上编译 C++ (Mingw/Cygwin)

arrays - 我可以在 Go 中使用 "displaced"数组基数吗?

ubuntu - 在 Linux 服务器上提供 Go API