Android ndk构建的共享库导致java.lang.UnsatisfiedLinkError

时间:2013-01-31 10:02:39

标签: android android-ndk

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

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

问题: 正如他们推荐的in this FAQ,我检查了nm myEngine.so输出,并说“没有符号”。这对我来说很奇怪,因为我检查了JNIEXPORT限定词的所有jni代码,这没关系。 但是,readelf -Ws myEngine.so为我提供了正确的(?)符号表,此函数的名称为unmangled,如下所示:

 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
 ...

可能存在什么问题,如何避免此异常?

谢谢你的到来。

1 个答案:

答案 0 :(得分:0)

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