我正在尝试通过JNI调用从Java调用Go函数。Java编译是可以的。当我尝试构建Go共享对象(.so)时,它给我带来了关于可从Java调用的C函数包装器的“多个定义”的错误。
这是Java代码:
package yada.yada.locksmith;
import java.io.*;
public class Locksmith {
private native void setup(String ClientID, String ClientSecret, String RedirectURL, String AuthURL, String TokenURL, String UserInfURL);
private native String auth(String user, String pw);
static {
System.loadLibrary("Locksmith");
}
public static void Locksmith(String[] args) {
Locksmith locksmith = new Locksmith();
locksmith.setup(
"yadayadayadayadayadayadayadayadayadayada",
"yadayadayadayadayadayadayadayadayadayada",
"https://yada.yada/Yada/yada",
"https://yada.yada/Yada/yada2",
"https://yada.yada/Yada/yada3",
"https://yada.yada/Yada/yada4"
);
// Create the console object
Console cnsl = System.console();
if (cnsl == null) {
System.out.println("No console available");
return;
}
String user = cnsl.readLine("Enter username : ");
char[] pw = cnsl.readPassword("Enter password : ");
System.out.println(locksmith.auth(user,new String(pw)));
}
}
我用以下公式编译它:
javac Locksmith.java
然后我生成了头文件:
javac -h .锁匠.java
这是生成的文件:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class yada_yada_locksmith_Locksmith */
#ifndef _Included_yada_yada_locksmith_Locksmith
#define _Included_yada_yada_locksmith_Locksmith
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: yada_yada_locksmith_Locksmith
* Method: setup
* Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_yada_yada_locksmith_Locksmith_setup
(JNIEnv *, jobject, jstring, jstring, jstring, jstring, jstring, jstring);
心有法竹
相关分类