如何在调用预构建库的静态方法时声明本机方法?

时间:2011-06-24 13:22:02

标签: android java-native-interface

当我使用时

#include<jni.h>
#include "convert.h"
#include "com_jniso_CallJni.h"
#include<stdio.h>
JNIEXPORT  void JNICALL Java_com_jniso_CallJni_takeint(JNIEnv *env,jclass c)
{
    setint();
}
JNIEXPORT  jint JNICALL Java_com_jniso_CallJni_takedouble(JNIEnv *env,jclass c)
{
    return getdouble();
}

我在编译时遇到错误

Compile arm    : Met <= Methodscall.c
D:/workspace/methods/jni/convert.h:3: warning: 'setint' used but never defined
D:/workspace/methods/jni/convert.h:4: warning: 'getdouble' used but never defi
d
SharedLibrary  : libMet.so
D:/workspace/methods/obj/local/armeabi/objs/Met/Methodscall.o: In function `Java
_com_jniso_CallJni_takedouble':
D:/workspace/methods/jni/Methodscall.c:11: undefined reference to `getdouble'
D:/workspace/methods/obj/local/armeabi/objs/Met/Methodscall.o: In function `Java
_com_jniso_CallJni_takeint':
D:/workspace/methods/jni/Methodscall.c:7: undefined reference to `setint'
collect2: ld returned 1 exit status
make: *** [/cygdrive/d/workspace/methods/obj/local/armeabi/libMet.so] Error 1

如果我在原生声明中提到静态。 它编译成功。 但是在跑步的时候我正在接受

  

UnsatisfiedLinkError。 WARN / dalvikvm(1230):未找到任何实施   原生Lcom / corpus / NativeLib; .setint()V

请帮帮我 谢谢&amp;此致

1 个答案:

答案 0 :(得分:0)

我使用.so文件作为共享库。从共享库我们无法调用静态方法。并且在上面我的库没有正确包含。因为格式与android.Hence不兼容它不是工作