6

2つのネイティブライブラリを使用する必要があります。1つは自分のライブラリで、もう1つはサードパーティです。それらを別々のプロジェクトで使用している限り、すべて問題ありませんでした。しかし今、私はを取得していException Ljava/lang/UnsatisfiedLinkErrorます。

私はEclipseを使用しています。

既存のライブラリをlibs/armeabiに配置すると、Eclipseがネイティブコードのコンパイルを開始し、失敗することがわかりました。コマンドラインからJNIパーツを再構築すると、コンパイルは成功しますが、サードパーティのライブラリが表示されなくなります。本当にバカ。

では、Eclipseに既存の.soライブラリとビルドする必要のあるライブラリを使用するように指示するにはどうすればよいですか?ライブラリは独立しています。

4

2 に答える 2

9

NDKでは、PREBUILT_SHARED_LIBRARY変数を使用して、ビルド済みのユーザーライブラリとリンクできます。

リンクする必要のあるライブラリがlibrandom.soであると仮定して、プロジェクトフォルダーのサブフォルダーlibsにフォルダーを作成します。jni

mkdir -p jni/libs
cp librandom.so jni/libs

次に、jni/libs/Android.mkファイルを作成します。

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := random
LOCAL_SRC_FILES := librandom.so
include $(PREBUILT_SHARED_LIBRARY)

ビルド済みのライブラリごとにセクションを作成でき、すべてがに配置されjni/libsます。

次に、上記のファイルをjni / Android.mkに含めるだけで、動作させることができます。NDKドキュメントでは、これをAndroid.mkの途中ではなく、最後に行うことをお勧めします。

include $(LOCAL_PATH)/libs/Android.mk

ただし、このライブラリを必要とするモジュールの前にこれを行う必要があります。

リンクするには、ビルド済みライブラリにリンクするモジュールセクションに以下を追加する必要があります。

LOCAL_SHARED_LIBRARIES := random

libs/armeabi/次に、ndk-buildを実行すると、モジュールをビルドする前にこのライブラリがコピーされます。これで準備完了です。

注:これは、必要なヘッダーの問題を解決するものではありません。LOCAL_C_INCLUDESライブラリのヘッダーの場所を、それを必要とするモジュールの変数に追加する必要があります。

于 2012-04-28T21:24:03.570 に答える
3

これは私が今のところやったことです。それが不十分であるため、私は(スタックオーバーフローの意味で)私自身の(これ)答えを受け入れません。

新しいプロジェクトを作成し、そこにすべてのJavaファイルをコピーしました。次に、古いプロジェクトから.soライブラリをコピーし、サードパーティのライブラリをlibs/armeabiにコピーしました。

それは恐ろしいです。しかし、それは機能します。今のところは。最悪のことは、バージョン管理が魚雷で行われることです。

于 2012-04-28T12:37:01.750 に答える