cygwinでAndroidNDKr6bを使用しています(システムは正しく更新されています)。NDKの操作方法を学ぶために、hello-jniサンプルを変更しています。hello-jni(実際には、ndkfoo.cppという単一の.cppファイルを使用してhelloworldというprjを作成しました)サンプルで使用したいC ++で記述されたライブラリがあるため、Eclipseで新しいAndroidプロジェクトを作成しました( Android用に更新)、jniディレクトリを追加し、Android.mkファイルとApplication.mkファイルを追加し、.cppをコンパイルするためにそれらを編集しました。コンパイルの最後に、.soファイルを取得します。
さて、helloworld Android.mkでは、リンカーにそのライブラリを含めるように指示するために、いくつかの編集を行う必要があります。ライブラリファイルがlibmylib.soであるとすると、次のandroid.mkスクリプトがあります。
LOCAL_PATH:= $(my-dirを呼び出す)
$(CLEAR_VARS)を含める
LOCAL_MODULE:= ndkfoo
LOCAL_SRC_FILES:= ndkfoo.cpp
LOCAL_C_INCLUDES + = $(LOCAL_PATH)/ mylib
LOCAL_LDLIBS + = -L $(LOCAL_PATH)/../../ mylib / libs / armeabi / -lmylib
$(BUILD_SHARED_LIBRARY)を含める
私のディレクトリは次のように構成されています。
d:/android/android-ndk-r6b => android ndk root
d:/android/workspace/helloworld => helloworld project
d:/android/workspace/mylib => mylib project library
(したがって、libmylib.soへのパスはd:/ android / worksheet / mylib / libs / armeabiです)。
残念ながら、これは機能していないようです。mylibへのすべての参照をndkfoo.cppから削除すると、それはコンパイルされ、私の電話でも実行されます。mylibへの参照を削除しないと、コンパイルされますがリンクされません。次の結果が得られます。
D:/android/android-ndk-r6b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windo ws / bin /../ lib / gcc / arm-linux-androideabi / 4.4.3 / .. / ../../../arm-linux-androideabi/ bin / ld.exe:-lmylibが見つかりません
追伸 helloworldプロジェクトのjniディレクトリでndk-buldを実行していることを忘れました。Pss。私はインターネット上で多くの同様の質問を見つけました。私は常にVisualC/ C ++ IDEを使用しているので、GCCやmakefileなどを初めて使用します...