Android NDK偶尔会出现不满意的错误

时间:2012-02-20 23:03:27

标签: android android-ndk unsatisfiedlinkerror

我正在寻找线索为什么我的Android应用程序偶尔会在特定的ndk调用上抛出一个UnsatisfiedlinkError异常:

我有一个Android应用程序,通过ndk加载一个本机库。

本机库是用C ++编写的,并使用STL(在我的makefile中我设置了APP_STL:= stlport_static)。没有使用或需要其他库。本机库有大约300个本机方法,可用于大约20个java类。

大多数时候一切正常。但是我的用户偶尔会遇到UnsatisfiedLinkError异常。异常总是在具有相同本机函数调用的同一位置触发,但奇怪的是它甚至不是对本机函数的第一次调用,甚至不是对该特定本机函数的第一次调用。

任何线索都是受欢迎的,为什么一个特定的本机调用可能会失败。 ndk很容易被破坏?你如何调试这样的问题?

具有相同调用的简单测试程序工作正常。不过这里是源代码的一些部分:

这是Java中的问题ndk函数:

public class Server {
...
    static private native long longObserveError( );
...
}

这是头文件:     extern“C”{     ...

JNIEXPORT jlong JNICALL Java_be_gentgo_tetsuki_Server_longObserveError
  (JNIEnv *, jclass);
...
}

这是实施:

IGSProtocol *server = 0; // initialized later...

JNIEXPORT jlong JNICALL Java_be_gentgo_tetsuki_Server_longObserveError
  (JNIEnv *env, jclass)
 {
   Messenger &mess = server->ObserveError( );
   return (long)(&mess);
 }

1 个答案:

答案 0 :(得分:2)

您的图书馆文件的名称是什么?我遇到了另一个SO帖子(https://stackoverflow.com/a/18024816),其中这个人的图书馆名称与只在某些设备上出现的系统库相冲突。重命名他的图书馆解决了这个问题。