所以我试图获得this native library here并在Java应用程序中编译并运行它。这是我在尝试从本机库运行代码时收到的错误:
Exception in thread: java.lang.UnsatisfiedLinkError: package.class.Init(Ljava/lang/String;IIIII)I
at...
Caused by: java.lang.UnsatisfiedLinkError: package.class.Init(Ljava/lang/String;IIIII)I
at package.class.Init(Native Method)
at...
这是我的过程。
所以我已经下载了MinGW(64位,因为如果它是32位,我正在大吼大叫)并编译原生库,如下所示:
g++ -I"D:\My Programs\Java\jdk1.7.0_67\include" -I"D:\My Programs\Java\jdk1.7.0_67\include\win32" gifflen.cpp -o gifflen.so -shared -fPIC -Wl,--kill-at
这给了我 gifflen.so 文件,我在Java应用程序中使用了这个文件:
...
private native int Init(String gifName, int w, int h, int numColors, int quality, int frameDelay);
private native void Close();
private native int AddFrame(int[] inArray);
static
{
System.load("D:/Desktop/gifflen4.so");
}
...
我不确定什么是相关的,什么不是,但这里是 gifflen.cpp 顶部的一部分,包括函数 Init (),在上面的错误中提到:
extern "C"
{
JNIEXPORT jint JNICALL Java_org_jiggawatt_giffle_Giffle_Init(JNIEnv *ioEnv, jobject ioThis, jstring gifName, jint w, jint h, jint numColors, jint quality, jint frameDelay);
JNIEXPORT void JNICALL Java_org_jiggawatt_giffle_Giffle_Close(JNIEnv *ioEnv, jobject ioThis);
JNIEXPORT jint JNICALL Java_org_jiggawatt_giffle_Giffle_AddFrame(JNIEnv *ioEnv, jobject ioThis, jintArray inArray);
};
JNIEXPORT jint JNICALL Java_org_jiggawatt_giffle_Giffle_Init(JNIEnv *ioEnv, jobject ioThis, jstring gifName, jint w, jint h, jint numColors, jint quality, jint frameDelay)
{
// code etc...
}
答案 0 :(得分:0)
您的Java代码不在正确的包和类中。原生方法应该在org.jiggawatt.giffle.Giffle
。