2011-06-17 11 views
2

既存のC++コードベースにJNIインターフェイスを構築しようとしています。私は正常に私のJNI関数の.soファイルを構築し、正常にJavaコード内からその関数を呼び出すことができます。Android上のJNIライブラリから事前構築された共有ライブラリを参照する

libpng(NDKツールチェーンで.soファイルにコンパイルされた)関数を呼び出す次の手順に進むと、JNI関数に関連付けられた共有ライブラリを正常に構築できます。 .MKファイルによってlibpng12.soがlibs/armeabiディレクトリにコピーされます。

エミュレータにアプリケーションをデプロイすると、/ dataの下のアプリケーションフォルダのlibディレクトリにJNI .soとlibpng.soの両方が配置されます。私のJNIライブラリのSystem.loadLibraryを呼び出すと、そのコードはアプリケーションのlibディレクトリにあります。

しかし、コードがlibpng.soファイルにアクセスしようとするとUnsatisfiedLinkErrorが返されます。エミュレータでstraceを使用すると、JNIライブラリがロードされたのと同じ場所からではなく、/ system/libからlibpng.soをロードしようとしていることがわかります。

参照されるライブラリがどこから読み込まれるかを制御する方法はありますか?/system/libにインストールする必要はないようです。アプリケーションを配備すると参照される.soファイルがアプリのlibディレクトリに置かれるという事実は、そこに見つかることを示しているようです。 LOCAL_PATH::= $(私の-DIRを呼び出す)任意の助けを事前に

include $(CLEAR_VARS) 

LOCAL_MODULE := png12 
LOCAL_SRC_FILES := libpng12.so 
LOCAL_EXPORT_C_INCLUDES := /home/jipping/libpng-1.2.44 

include $(PREBUILT_SHARED_LIBRARY) 

include $(CLEAR_VARS) 

LOCAL_MODULE := PNGLib 
LOCAL_SRC_FILES := PNGLib.cpp 
LOCAL_SHARED_LIBRARY := png12 

LOCAL_LDLIBS := -L/cygdrive /c/Users/mcfall/workspace/AndroidCalculator/jni -lpng12 
LOCAL_C_INCLUDES := /home/mcfall/libpng-1.2.44 

include $(BUILD_SHARED_LIBRARY) 

おかげで、それは価値がある何のため

は、ここで私たちが使用しているの.mkファイルです。

答えて

0

libpng12.soをロードすると、System.loadLibraryも使用してください。必要なシンボルがすべてロードされるようにjniライブラリをロードする前にこれを行います。

関連する問題