5

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などを初めて使用します...

4

1 に答える 1

1

メッセージ

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 が見つかりません

は、リンカーがライブラリを見つけられないことを示しています。これは、LD_LIBS のパスの問題に起因するはずです。

my-dir マクロにはデバイスのユニット識別子が含まれていないと思うので、LOCAL_PATH 変数には D: が含まれていないはずであり、cygwin では機能しないと思います。私は Linux ユーザーであり、100% 確実ではありませんが、

LOCAL_PATH := $(call my-dir)

LOCAL_PATH := D:$(call my-dir)

それはうまくいくはずです。一方、次のように設定することで、いつでも相対パスを設定できます。

LOCAL_LDLIBS += -L$../../mylib/libs/armeabi/ -lmylib
于 2012-10-04T20:31:51.120 に答える