我正在尝试使用 JNI 从 scala 代码调用 go 函数。有问题的功能如下
//export Java_jniroute_TestJNI_printDisplay
func Java_jniroute_TestJNI_printDisplay(env *C.JNIEnv, obj C.jobject) {
size := C.jx_GetIntArrayElements(env, val1, (*C.jboolean)(nil))
fmt.Println("hello from go")
为了启用 go call jx_GetIntArrayElements 我已经用代码创建了一个包装器 C lib
#include "jni.h"
int* wx_GetIntArrayElements(JNIEnv *env, jintArray array, jboolean *isCopy)
{
return (*env)->GetIntArrayElements(env, array, isCopy);
}
使用导出到 GO
/*
#cgo LDFLAGS: -L${SRCDIR} -lwc
#include "wc.h"
*/
编译进行得很好,并且创建了 go lib libnnturboroute 但是一旦我尝试使用 System.loadLibrary(library) 从 Scala 中加载 lib,我得到以下异常
异常或错误导致运行中止:/libnnturboroute.dylib: dlopen(/libnnturboroute.dylib, 1): Library not loaded: libwc.dylib。从 jvm 似乎无法从 JNI 公开的方法中加载 libwc.dylib。我知道需要从 JNI 代码中调用动态依赖库。但是我无法使用 golang 代码加载库,因为 C.dlopen 本身需要通过 C 包装库导入。