【问题标题】:Calling native library functions, getting java.lang.UnsatisfiedLinkError?调用本机库函数,得到 java.lang.UnsatisfiedLinkError?
【发布时间】:2015-03-24 17:55:22
【问题描述】:

所以我正在尝试获取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...
}

【问题讨论】:

  • 我猜你的 Java 代码不在正确的包和类中。本机方法应位于org.jiggawatt.giffle.Giffle
  • @ChristianHackl 好吧,当你这样指出时,这很明显,哈哈。就是这样,它似乎可以工作,尽管现在应用程序只是崩溃并出现指向 .so 文件的致命错误“EXCEPTION_ACCESS_VIOLATION”。哦,好吧。
  • 这是一个完全不同的错误。我想您应该为此提出一个新问题,或者研究一些现有的 SO 问题。我现在会把我的评论变成一个答案。

标签: java c++ java-native-interface mingw mingw-w64


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 2014-08-25
    • 2013-08-03
    相关资源
    最近更新 更多