2012-01-10 6 views
2

私は新しいAndroidのNDK r7のリリースを使用して、Android用libSDLのこのポートを構築しようとしている:は-lgnustl_static見つけることができません。コンパイルアンドロイドSDLポートをNDK R7と

https://github.com/pelya/commandergenius

私は私がやっている知っていますある程度は「サポートされていません」ということがあります。私はcygwin &ウィンドウを使用していますが、これはREADMEに記載されていますが、もはやサポートされていません。つまり、私はシェルスクリプトをハックして、必要に応じて自分の問題を解決し、コンパイルしてもリンクさせないようにすることができます。

/cygdrive/c/and/android-ndk-r7/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-ar crs obj/local/armeabi/libflac.a ./obj/local/armeabi/objs-debug/flac/src/ogg_decoder_aspect.o ./obj/local/armeabi/objs-debug/flac/src/md5.o ./obj/local/armeabi/objs-debug/flac/src/stream_decoder.o ./obj/local/armeabi/objs-debug/flac/src/fixed.o ./obj/local/armeabi/objs-debug/flac/src/memory.o ./obj/local/armeabi/objs-debug/flac/src/stream_encoder.o ./obj/local/armeabi/objs-debug/flac/src/window.o ./obj/local/armeabi/objs-debug/flac/src/cpu.o ./obj/local/armeabi/objs-debug/flac/src/ogg_encoder_aspect.o ./obj/local/armeabi/objs-debug/flac/src/lpc.o ./obj/local/armeabi/objs-debug/flac/src/float.o ./obj/local/armeabi/objs-debug/flac/src/bitmath.o ./obj/local/armeabi/objs-debug/flac/src/metadata_object.o ./obj/local/armeabi/objs-debug/flac/src/ogg_helper.o ./obj/local/armeabi/objs-debug/flac/src/metadata_iterators.o ./obj/local/armeabi/objs-debug/flac/src/bitreader.o ./obj/local/armeabi/objs-debug/flac/src/bitwriter.o ./obj/local/armeabi/objs-debug/flac/src/stream_encoder_framing.o ./obj/local/armeabi/objs-debug/flac/src/crc.o ./obj/local/armeabi/objs-debug/flac/src/format.o ./obj/local/armeabi/objs-debug/flac/src/ogg_mapping.o 
C:/and/android-ndk-r7/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld.exe: cannot find -lgnustl_static 
collect2: ld returned 1 exit status 
/cygdrive/c/and/android-ndk-r7/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-ar crs obj/local/armeabi-v7a/libflac.a ./obj/local/armeabi-v7a/objs-debug/flac/src/ogg_decoder_aspect.o ./obj/local/armeabi-v7a/objs-debug/flac/src/md5.o ./obj/local/armeabi-v7a/objs-debug/flac/src/stream_decoder.o ./obj/local/armeabi-v7a/objs-debug/flac/src/fixed.o ./obj/local/armeabi-v7a/objs-debug/flac/src/memory.o ./obj/local/armeabi-v7a/objs-debug/flac/src/stream_encoder.o ./obj/local/armeabi-v7a/objs-debug/flac/src/window.o ./obj/local/armeabi-v7a/objs-debug/flac/src/cpu.o ./obj/local/armeabi-v7a/objs-debug/flac/src/ogg_encoder_aspect.o ./obj/local/armeabi-v7a/objs-debug/flac/src/lpc.o ./obj/local/armeabi-v7a/objs-debug/flac/src/float.o ./obj/local/armeabi-v7a/objs-debug/flac/src/bitmath.o ./obj/local/armeabi-v7a/objs-debug/flac/src/metadata_object.o ./obj/local/armeabi-v7a/objs-debug/flac/src/ogg_helper.o ./obj/local/armeabi-v7a/objs-debug/flac/src/metadata_iterators.o ./obj/local/armeabi-v7a/objs-debug/flac/src/bitreader.o ./obj/local/armeabi-v7a/objs-debug/flac/src/bitwriter.o ./obj/local/armeabi-v7a/objs-debug/flac/src/stream_encoder_framing.o ./obj/local/armeabi-v7a/objs-debug/flac/src/crc.o ./obj/local/armeabi-v7a/objs-debug/flac/src/format.o ./obj/local/armeabi-v7a/objs-debug/flac/src/ogg_mapping.o 
C:/and/android-ndk-r7/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld.exe: cannot find -lgnustl_static 
collect2: ld returned 1 exit status 

該当箇所を、テキストのその壁を解析できない場合:

ld.exe: cannot find -lgnustl_static 
をだから、とにかく、私は(大ブロックのため申し訳ありませんが、関連する部分は、以下のトリミング)、連結までの作業をコンパイルしている

私はWindowsのNDKのリリースを見れば今、私はここにgnustl_ *ファイルを検索:./android-ndk-r7/sources下

./cxx-stl/gnu-libstdc++/libs/armeabi/libgnustl_shared.so 
./cxx-stl/gnu-libstdc++/libs/armeabi/libgnustl_static.a 
./cxx-stl/gnu-libstdc++/libs/armeabi-v7a/libgnustl_shared.so 
./cxx-stl/gnu-libstdc++/libs/armeabi-v7a/libgnustl_static.a 
./cxx-stl/gnu-libstdc++/libs/x86/libgnustl_shared.so 
./cxx-stl/gnu-libstdc++/libs/x86/libgnustl_static.a 

私はLinuxのアンドロイドNDKのディストリビューションも見ましたが、それらは同じパッケージになっています(ソースディレクトリの下にビルドされたlibgnustlファイルしかありません)。

は、だから私は3つの質問している:なぜ我々はそれが.A ファイルだときlibgnustl_staticリンクする-lを

  • を使用することでしょうか?それは、オブジェクトファイル に.aファイルを含めるだけでなく、-lgnustl_shared?
  • なぜこれらのファイルは「ソース」の下にあるのですか?私は彼らが "toolchains"ライブラリNDKディレクトリにいると期待していました。誰もlibgnustlとリンクする方法は?
  • これらのファイルをリンカがどこから見えるのかコピーすることはできますか? -Lでディレクトリを追加するだけではうまくいかなかったし、適切なビルドターゲット(armeabi vs armeabi-v7 vs x86)にリンクする必要があります。

答えて

2

これが他の人を悩ませる場合解決方法は、-lgnustl_staticを削除し、代わりにリンカコマンドで c:\ path \を\ armeabi \ libs \ libgnustl_static.aにリストすることです。

リンカーがファイルを見つけることができないため、/ cygdriveスタイルのパスは使用しないでください。実際のc:\を使用してください...

+1

私は本当にそれがどのように働いているか知りたいです...それは私のためには機能しません。私はフォワードスラッシュから脱出しなければならなかったが、まだそれは見つからないと言います。 –

+0

それは私がそれを働かせるためにした醜いハックだった。私が話していることを正確に実行しようとしていますか(pelyaのSDLをコンパイルしてください)? – gravitron

+0

私はR7を使ってコードの全体をコンパイルしようとしています。私はちょうどNDK r6 crystax 2に戻った。 –

3

これはgcc/NDKのバグで、Linux、Cygwin、およびWindows(Cygwin以外)での表示が少し異なります。

私はそれを修正するために何をしましたか(Linux用で、盲目でCygwinを使用している開発者の一人のために働きます)...

  • 言うあなたAndroid.mkファイルに$(LOCAL_LDLIBS)に行を追加します(それはNDKに壊れて、それはLinuxのCygwinの、Windows上で若干異なる破損)あなたのApplication.mkからAPP_STL := gnustl_static
  • を言う行を削除します。

    $(NDK_ROOT)/ソース/ CXX-STL/GNU-のlibstdC++/4.6/libsに/ armeabi-v7a/libgnustl_static.a

もTWを追加

LOCAL_C_INCLUDES := $(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.6/include 
LOCAL_C_INCLUDES += $(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/include 

上記は、あなたのApplication.mkAPP_STL := gnustl_staticをするはずだったしたものを達成するでしょう:回答Android.mkにOライン。

関連する問題