微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用本机lib时出现UnsatisfiedLinkError

如何解决使用本机lib时出现UnsatisfiedLinkError

| 我使用NDK将这个库编译成.so。我可以使用System.LoadLibary()成功加载它,但是当我尝试该库的示例代码时,它将引发UnsatisfiedLinkError。我检查了该库的源代码,它确实具有与相同参数(jnienv和jobject除外)一起使用的函数以及相同的返回值。另外,库的创建者肯定会共享有效的示例代码。那我在做什么错?我从页面复制了确切的代码,并相应地更改了变量名。     

解决方法

没有更多细节,很难说。在查看了该站点上的库之后,可能已对类进行了不同的命名。您需要调用Java类
Giffle
,它必须位于包
org.jiggawatt.giffle
中。这不是您偶然偶然发现的命名约定;-)
package org.jiggawatt.giffle;

public class Giffle {
    static {
        System.loadLibrary(\"gifflen\");
    }

    public native int Init(String gifName,int w,int h,int numColors,int quality,int frameDelay);
    public native void Close();
    public native int AddFrame(int[] inArray);
}
要使用它,您可以在
Giffle
类中进行调用,或者可能更干净的方法是使用实​​例:
Giffle giffle = new Giffle();
giffle.Init(...);
giffle.AddFrame(...);
giffle.Close();
Java部分不在zip中似乎有些奇怪,尤其是在类名被硬编码到C符号中的情况下。也许编写它的人在Java部分中有一堆额外的代码,他不想让任何人看到。 据我所知,C和C ++代码是完整的。您根本不需要修改它。本地方法的实现在gifflen.cpp中,并且具有类似“ 5”的名称。它们具有JNI调用约定的正确本机侧参数。     ,您如何建立这个?我发现我每次运行
ndk-build
之后都必须在Eclipse中执行Project-> Clean…,以便Eclipse拾取.so文件并将其复制到apk。     ,试试这个方法。 http://mpigulski.blogspot.com/2010/09/debugging-dlopen-unsatisfiedlinkerror.html对我有帮助。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。