Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Windows上使用JNI从Java调用Golang会导致;“动态链接库(DLL)初始化例程失败”;_Java_Windows_Go_Java Native Interface_Mingw W64 - Fatal编程技术网

在Windows上使用JNI从Java调用Golang会导致;“动态链接库(DLL)初始化例程失败”;

在Windows上使用JNI从Java调用Golang会导致;“动态链接库(DLL)初始化例程失败”;,java,windows,go,java-native-interface,mingw-w64,Java,Windows,Go,Java Native Interface,Mingw W64,我创建了以下示例项目,以测试使用JNI从Java调用Golang代码: 当我调用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$Native

我创建了以下示例项目,以测试使用JNI从Java调用Golang代码:

当我调用
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)
线程“main”java.lang.UnsatisfiedLinkError:[…]\out\hello.dll中出现异常:动态链接库(dll)初始化例程失败 位于java.base/java.lang.ClassLoader$NativeLibrary.load0(本机方法) 位于java.base/java.lang.ClassLoader$NativelLibrary.load(ClassLoader.java:2430) 位于java.base/java.lang.ClassLoader$NativelLibrary.loadLibrary(ClassLoader.java:2487) 位于java.base/java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2684) 位于java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2649) 位于java.base/java.lang.Runtime.loadLibrary0(Runtime.java:829) 位于java.base/java.lang.System.loadLibrary(System.java:1867) 您好。(Hello.java:3) 使用环境:

  • Windows:10.0.17763,内部版本17763,64位
  • Golang: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内部的一个bug有关。目前打开了一个Pull请求,我可以批准该请求以解决问题。

这似乎与Golang本身的一个bug有关。当前打开了一个拉取请求,我可以批准该请求以解决问题。

另请参见:感谢您的输入。但是这些东西使用的是JNA,这不是我的问题。我需要一个JNI解决方案,因为JNA对于我来说太慢了。你不能用JNI调用任意库。您要么需要JNA,要么创建一个包装器库。请参阅我的答案,谢谢大家的回答。但同样:我的目标是创建一个JNI包装器。所以我的问题仍然是:我必须做什么才能使我的代码在Golang中是有效的JNI代码?在上面附加了一个项目,任务是修改它,直到它工作为止——使用JNI而不是JNA。谢谢另请参见:感谢您的输入。但是这些东西使用的是JNA,这不是我的问题。我需要一个JNI解决方案,因为JNA对于我来说太慢了。你不能用JNI调用任意库。您要么需要JNA,要么创建一个包装器库。请参阅我的答案,谢谢大家的回答。但同样:我的目标是创建一个JNI包装器。所以我的问题仍然是:我必须做什么才能使我的代码在Golang中是有效的JNI代码?在上面附加了一个项目,任务是修改它,直到它工作为止——使用JNI而不是JNA。谢谢