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.

問題:この 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
 ...

何が問題になる可能性がありますか? また、この例外を回避するにはどうすればよいですか?

よろしくお願いします。

4

1 に答える 1

0

私にはタイプミスのようです-関数が「Java_Foo_myfunc」であるのに、「LFoo」が見つからないというエラーメッセージが表示されることに注意してください。パッケージ名に LFoo が含まれている場合、関数を「Java_LFoo_myfunc」と呼ぶ必要があります。

于 2013-02-12T02:43:57.640 に答える