繁体   English   中英

调用本机库函数,得到java.lang.UnsatisfiedLinkError?

[英]Calling native library functions, getting java.lang.UnsatisfiedLinkError?

因此,我试图在此处获取此本机库,并使其在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...
}

您的Java代码不在正确的包和类中。 本机方法应该在org.jiggawatt.giffle.Giffle

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM