1

libgdx と弾丸物理エンジンを使用する Android ゲームを開発しています。問題なくゲームをコンパイルできますが、ゲームに弾丸を追加すると、次のエラーでクラッシュします。

.... UnsatisfiedLinkError: 箇条書きを読み込めませんでした: findLibrary が null を返しました ...

Bullet ライブラリは問題なくコンパイルできますが、コードで使用しようとするとクラッシュします。面白いことに、Bullet を使用するが libgdx を使用しない別のプロジェクトがあり、問題なく動作します。何が問題なのか知っている人はいますか?私が知っていることから、ndk-buildは.soファイルとobjフォルダーのみを生成します。

bullet .so ファイルが .apk に含まれていないように見えるため、クラッシュします。そうであるかどうかを確認するにはどうすればよいですか?誰かが同様の問題を抱えていましたか?

助けてくれてありがとう!

4

4 に答える 4

1

私は自分の問題を解決しました。問題は、libgdxのlibsフォルダーにarmeabiフォルダーとarmeabi-v7aフォルダーがあり、bulletにはarmeabiしかないことでした。だから私はarmeabi-v7aを削除しました、そしてそれは魔法のように働きました!

于 2012-01-16T22:38:10.483 に答える
0

System.loadLibraryに渡される名前が、.apkファイルの.so名と同じであることを確認してください。APKファイルは実際にはzipファイルです。そのため、名前を.zip拡張子に変更し、解凍して、内部のlibsフォルダーを調べることができます。

したがって、apkファイルのlibsフォルダーの下にlibFooBar.soという名前のファイルがある場合は、「FooBar」、「libFooBar」、または「libFooBar.so」のいずれかの名前をloadLibaryに渡す必要があります。

于 2012-01-16T22:36:28.077 に答える
0

.c ネイティブ ファイルの代わりに .cpp ネイティブ ファイルを使い始めたときに、この問題が発生しました。問題は、.cpp ビルド ツールでの名前マングリングを考慮していなかったことです。ネイティブ メソッド定義を囲む次の行を追加してみてください。

#ifdef __cplusplus 
extern "C" {
#endif
    /* ... */
#ifdef __cplusplus
}
#endif
于 2013-04-05T05:08:01.220 に答える