第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

嘗試編譯 Go 共享對象以通過 JNI 從 Java 調(diào)用時出錯

嘗試編譯 Go 共享對象以通過 JNI 從 Java 調(diào)用時出錯

Go
慕碼人2483693 2022-08-09 20:11:55
我正在嘗試通過JNI調(diào)用從Java調(diào)用Go函數(shù)。Java編譯是可以的。當(dāng)我嘗試構(gòu)建Go共享對象(.so)時,它給我?guī)砹岁P(guān)于可從Java調(diào)用的C函數(shù)包裝器的“多個定義”的錯誤。這是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 __cplusplusextern "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);
查看完整描述

1 回答

?
心有法竹

TA貢獻(xiàn)1866條經(jīng)驗 獲得超5個贊

cgo 文檔中的以下問題是:


在文件中使用 //export 會對前導(dǎo)碼施加限制:由于它被復(fù)制到兩個不同的 C 輸出文件中,因此它不能包含任何定義,只能包含聲明。如果文件同時包含定義和聲明,則兩個輸出文件將生成重復(fù)的符號,并且鏈接器將失敗。為避免這種情況,必須將定義放在其他文件的序言中,或放在 C 源文件中。


移動線條


extern void Setup(char *, char *, char *, char *, char *, char *);

extern char *Auth(char *, char *);

到 該文件和 C 定義將生成以下成功構(gòu)建的前導(dǎo)碼:locksmith.hlocksmith.c


/*

#cgo CFLAGS: -I/usr/local/bin/jdk-15.0.1/include -I/usr/local/bin/jdk-15.0.1/include/linux


#include "locksmith.h"

*/

import "C"

的開頭將包含以下內(nèi)容:locksmith.c


#include <string.h>

#include <jni.h>        // JNI header provided by JDK

#include "locksmith.h"

#include "yada_yada_locksmith_Locksmith.h"

此外,構(gòu)建命令需要只是


go build -o liblocksmith.so -buildmode=c-shared

沒有在最后。locksmith.go


查看完整回答
反對 回復(fù) 2022-08-09
  • 1 回答
  • 0 關(guān)注
  • 212 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號