坚持“试图加载lib”,永远不会回来

时间:2012-10-03 04:32:43

标签: android android-ndk java-native-interface

我有一个由C ++编写的旧应用程序,我正在尝试将其移植到android,并使用eclipse进行调试,但项目正在停止并显示错误消息:

10-03 12:21:55.344:D / dalvikvm(15262):尝试加载lib /data/data/com.android.test/lib/libtest.so 0x40effa48

应用程序停止而不提供任何其他消息。我不知道怎么做继续。

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,但这是由bug

引起的

所以只需从您的Application.mk中删除NDK_TOOLCHAIN_VERSION = 4.7我只在Android 2.2上使用android-ndk-r8e

答案 1 :(得分:0)

您必须将以下功能添加到您的库中:

#include <jni.h>
jint JNI_OnLoad( JavaVM* vm, void* reserved )
{
    JNIEnv* jEnv = NULL;

if ( JNI_OK != ( *vm )->GetEnv( vm, (void**)&jEnv, JNI_VERSION_1_4 ) ){
    return -1;
}
return JNI_VERSION_1_4;

}
更新:缺少JNI_OnLoad()不是问题... 你在评论中写道,你有很多全球性的initers - 考虑在JNI_OnLoad()中做这样的全局初始化

签名

/*
 * Class:     com_android_test_testLib
 * Method:    init
 * Signature: (II)V
 */
JNIEXPORT void JNICALL Java_com_android_test_testLib_init
  (JNIEnv *, jclass, jint, jint);

/*
 * Class:     com_android_test_testLib
 * Method:    uninit
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_android_test_testLib_uninit
  (JNIEnv *, jclass);

/*
 * Class:     com_android_test_testLib
 * Method:    touch
 * Signature: (IIII)V
 */
JNIEXPORT void JNICALL Java_com_android_test_testLib_touch
  (JNIEnv *, jclass, jint, jint, jint, jint);

/*
 * Class:     com_android_test_testLib
 * Method:    update
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_android_test_testLib_update
  (JNIEnv *, jclass);