Я реализую свои функции нативного интерфейса Java в Golang, используя golang C
lib.
Теперь я хочу преобразовать jstring
в строку UTF-8, используя функцию JNI GetStringUTFChars
, но при этом я получаю ошибку. Вот шаги, которые я сделал:
В моем классе Java (называемом MyClass), где я определил метод JNI, у меня есть:
public static native void print(String msg);
Используя javah
, я сгенерировал .h
-файл с функцией, определенной на языке C:
JNIEXPORT void JNICALL Java_com_mypackage_MyClass_print
(JNIEnv *, jclass, jstring);
Тогда в моем коде Go у меня есть следующий код:
package main
// #cgo CFLAGS: -I/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/include
// #cgo CFLAGS: -I/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/include/darwin
/*
#include <jni.h>
*/
import "C"
//export Java_com_mypackage_MyClass_print
func Java_com_mypackage_MyClass_print(env *C.JNIEnv, clazz C.jclass, str C.jstring) {
_ = C.GetStringUTFChars(env, str, 0)
}
Когда я создаю файл go
, используя:
go build -buildmode=c-shared -o libmyclass.dylib libmyclass.go
тогда я получаю следующую ошибку:
could not determine kind of name for C.GetStringUTFChars
Как мне вызвать GetStringUTFChars
, определенный в JNI spec , чтобы затем я мог напечатать строку с fmt.println
?
РЕДАКТИРОВАТЬ 2
Удалено «edit 1», так как процедура выше была правильной, это была просто переменная LD_LIBRARY_PATH, которая не была установлена.