1

概要: 该库(称为 myEngine.so)使用 jni 来包装本机 c/c++ 代码并为 Java 本机方法提供接口。ndk-build我目前使用android ndk 的脚本构建它。

根据 dalvikvm 日志,加载System.loadLibrary( "myEngine" );运行良好,java.lang.UnsatisfiedLinkError异常带有以下类型的消息:No implementation found for native LFoo;.myfunc()V.

问题: 正如他们在此常见问题解答中建议的那样,我检查了nm myEngine.so输出,它说“没有符号”。这对我来说看起来很奇怪,因为我已经检查了所有 jni 代码的JNIEXPORT限定符,这没关系。但是,readelf -Ws myEngine.so给了我正确的(?)符号表,该函数的名称未损坏,如下所示:

 Symbol table .dynsym contains 3237 entries:

 Num:    Value  Size Type    Bind   Vis      Ndx Name

 0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
 1: 0003c0d0     0 SECTION LOCAL  DEFAULT    7 
 2: 0027e078     0 SECTION LOCAL  DEFAULT   12
 ...
 56: 0003d3c9    36 FUNC    GLOBAL DEFAULT    7 Java_Foo_myfunc
 ...

可能是什么问题,我该如何避免这个异常?

谢谢是提前。

4

1 回答 1

0

对我来说似乎是一个错字 - 请注意错误消息是关于找不到“LFoo”而你的函数是“Java_Foo_myfunc”。如果你的包名有 LFoo,你需要调用你的函数“Java_LFoo_myfunc”。

于 2013-02-12T02:43:57.640 回答