2011-09-09 19 views
5

私は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ファイルには本当に新しいですのように...

+1

[OK]をクリックすると、この問題を解決する方法が見つかりました。私が理解できないいくつかの奇妙な理由のために、-L/cygdrive/d/android/workspace/mylib/libs/armeabiで指定されたパスは機能しません(そしてLOCAL_PATHを使用するとエラーが発生します)。代わりに、-Ld:/ android/workspace/mylib/libs/armeabiまたは-L ../../ mylib/libs/armeabiを使用すると機能します。私はcygwinがここの問題だと思います... – Luke

+0

あなたの問題を解決したら答えとしてあなたのコメントを投稿してください –

答えて

1

メッセージ

D:/アンドロイド/アンドロイド - NDK-R6B /ツールチェーン/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では動作しません。あなたはそれが動作するはず

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

によって

LOCAL_PATH := $(call my-dir) 

を交換した場合、私はLinuxのユーザーだと私は100%確実ではないんだけど。一方、相対パスを設定するには、常に次のように設定します。

LOCAL_LDLIBS += -L$../../mylib/libs/armeabi/ -lmylib 
関連する問題