1

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

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

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

大多数时候一切正常。但是我的用户时不时会收到 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);
 }
4

1 回答 1

2

What is the name of your library file? I came across another SO post (https://stackoverflow.com/a/18024816) where the guy had a library name that was conflicting with a system library that was only present on some devices. Renaming his library fixed the problem.

于 2013-11-26T18:50:14.250 回答