概要:
ライブラリ (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
.
問題:この FAQで
推奨されているように、出力を確認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
...
何が問題になる可能性がありますか? また、この例外を回避するにはどうすればよいですか?
よろしくお願いします。