1
我有一些問題試圖讓JNI工作。 我有一個C++應用程序,我想在我的Java程序中調用這個應用程序的方法。 我寫了我的Java程序調用本地方法,然後我用javah
來生成頭文件。一旦我的C++測試程序被編譯成一個庫.so,我從我的java程序調用這個庫。加載System.loadLibrary是好的,但似乎他無法找到它的方法。我得到一個:JNI:java.lang.UnsatisfiedLinkError錯誤
Exception in thread "main" java.lang.UnsatisfiedLinkError: ApiPackets.get_lost_packets()V
at ApiPackets.get_lost_packets(Native Method)
at ApiPackets.main(ApiPackets.java:12)
這裏是我的Java調用本地方法:
public class ApiPackets {
public native void get_lost_packets();
public native int get_late_packets();
public native int get_out_of_order_packets();
static { System.loadLibrary("ApiPackets");}
public static void main(String[] args) {
ApiPackets api = new ApiPackets();
System.out.println("pass");
api.get_lost_packets();
}
}
這是我的C++,然後編譯成libApiPackets.so
:
#include "ApiPackets.h"
#include <stdio.h>
#include "main_window.h"
JNIEXPORT void JNICALL Java_ApiPackets_get_lost_packets
(JNIEnv * env, jobject obj) {
printf("coucou");
return;
}
JNIEXPORT jdouble JNICALL Java_ApiPackets_get_1late_1packets
(JNIEnv * env, jobject obj) {
jdouble late = mw->priv->current_call->get_late_packets();
return late;
}
JNIEXPORT jdouble JNICALL Java_ApiPackets_get_1out_1of_1order_1packets
(JNIEnv * env, jobject obj) {
jdouble out_of_order = mw->priv->current_call->get_out_of_order_packets();
return out_of_order;
}
我有同樣的問題,我已嘗試應用您的建議在我的.h文件,但它不起作用。這裏有一個片段:「extern」C「JNIEEXPORT void JNICALL Java_cppjbridge_HelloJNI_changeJavaStatus (JNIEnv *,jclass); }' – 2014-06-19 15:16:07