梗概:
库(称为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
...
可能存在什么问题,如何避免此异常?
谢谢你的到来。
答案 0 :(得分:0)
对我来说似乎是一个错字 - 请注意,错误消息是关于找不到“LFoo”,而你的函数是“Java_Foo_myfunc”。如果您的包名称具有LFoo,则需要调用您的函数“Java_LFoo_myfunc”。