私はcygwinの下でAndroid NDK r6bを使っています(システムは正しく更新されています)。私はNDKでの作業を学ぶためにhello-jniサンプルを変更しています。私はhello-jniで使用したいC++で書かれたライブラリを持っているので(実際には、helloworldという名前のprjをndkfoo.cppという単一の.cppファイルで作成しています)、sample、私はEclipseで新しいAndroidプロジェクトを作成しましたAndroid用に更新)、jniディレクトリを追加し、Android.mkとApplication.mkファイルを追加し、.cppをコンパイルするためにそれらを編集しました。コンパイルの最後に、私は.soファイルを入手します。Android NDK - 外部ライブラリをリンクする際の問題(見つからない)
今、helloworld Android.mkでは、リンカーにそのライブラリを含めるように指示するためにいくつかの編集を行う必要があります。
LOCAL_PATH::= $(私の-DIRを呼び出す)
は$(CLEAR_VARS)が含ま
LOCAL_MODULE:=ライブラリファイルが libmylib.so であると仮定し、私は次のようandroid.mkのスクリプトを持っています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/workspace/mylib/libs/armeabiです)。
残念ながら、これはうまくいかないようです。 nydkfoo.cppからmylibへのすべての参照を削除すると、コンパイルされ、自分の電話機でも実行されます。
D:/android/android-ndk-r6b/toolchains/arm-linux-androideabi-4.4私は、次のような結果を得る:私はMYLIBへの参照を削除しない場合、それはしかし、リンクをdoens'tコンパイルします。 3/prebuilt/windo ws/bin /../ lib/gcc/arm-linux-androideabi/4.4.3 /../../../../ arm-linux-androideabi/ bin/ld。 exe:-lmylibを見つけることができません
Ps。 helloworldプロジェクトのjniディレクトリの下でndk-buldを実行していることを忘れてしまいました。 Pss。 私はインターネット上で多くの同様の質問を見つけました。私はいつものVisual C/C++ IDEで働いているので、私はGCC、Makeファイルには本当に新しいですのように...
[OK]をクリックすると、この問題を解決する方法が見つかりました。私が理解できないいくつかの奇妙な理由のために、-L/cygdrive/d/android/workspace/mylib/libs/armeabiで指定されたパスは機能しません(そしてLOCAL_PATHを使用するとエラーが発生します)。代わりに、-Ld:/ android/workspace/mylib/libs/armeabiまたは-L ../../ mylib/libs/armeabiを使用すると機能します。私はcygwinがここの問題だと思います... – Luke
あなたの問題を解決したら答えとしてあなたのコメントを投稿してください –