2011-12-22 10 views
5

私はAndroid共有ライブラリとしてlibrawを構築しようとしています。 libがAndroid.mkなどで使用するにはあまりにも複雑すぎるようです。私はそれを行うことはまだできません。スタンドアロンのツールチェーンアンドロイドアームでネイティブライブラリを構築する

私はNDKのスタンドアロンのツールチェーンを使用するルートを試しましたが、このlibをコンパイルするときに固まっています。

これはlibをコンパイルするためのパスです。明らかなエラーが発生している場合は、指摘してください。

  1. 私はndkをダウンロードしました。
  2. RAN:make-standalone-toolchain.sh
  3. は私のPATHに最初の項目としてそのスタンドアロンのツールチェーンのbinフォルダを追加しました。
  4. an ./configure--host=arm-linux-androideabi。これは成功しました
  5. Ran make、ここでは非常に高速にクラッシュしました。
 
    LibRaw-0.14.4$ make 
    depbase=`echo internal/dcraw_common.lo | sed 's|[^/]*$|.deps/&|;s|\.lo$||'`;\ 
     /bin/bash ./libtool --tag=CXX --mode=compile arm-linux-androideabi-g++ -DPACKAGE_NAME=\"LibRaw\" -DPACKAGE_TARNAME=\"libraw\" -DPACKAGE_VERSION=\"0.14.4\" -DPACKAGE_STRING=\"LibRaw\ 0.14.4\" -DPACKAGE_BUGREPORT=\"[email protected]\" -DPACKAGE_URL=\"http://www.libraw.org\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -I. -I/usr/local/include -g -O2 -MT internal/dcraw_common.lo -MD -MP -MF $depbase.Tpo -c -o internal/dcraw_common.lo internal/dcraw_common.cpp &&\ 
     mv -f $depbase.Tpo $depbase.Plo 
    libtool: compile: arm-linux-androideabi-g++ -DPACKAGE_NAME=\"LibRaw\" -DPACKAGE_TARNAME=\"libraw\" -DPACKAGE_VERSION=\"0.14.4\" "-DPACKAGE_STRING=\"LibRaw 0.14.4\"" -DPACKAGE_BUGREPORT=\"[email protected]\" -DPACKAGE_URL=\"http://www.libraw.org\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -I. -I/usr/local/include -g -O2 -MT internal/dcraw_common.lo -MD -MP -MF internal/.deps/dcraw_common.Tpo -c internal/dcraw_common.cpp -fPIC -DPIC -o internal/.libs/dcraw_common.o 
    internal/dcraw_common.cpp: In member function 'void LibRaw::read_shorts(ushort*, int)': 
    internal/dcraw_common.cpp:119: error: 'swab' was not declared in this scope 
    internal/dcraw_common.cpp: In member function 'void LibRaw::write_ppm_tiff()': 
    internal/dcraw_common.cpp:9235: error: 'swab' was not declared in this scope 
    make: *** [internal/dcraw_common.lo] Error 1 

私は、このエラーメッセージはstackoverflowの時にここに参考になっているが、私は、私はこの作業を取得するためにいくつかの追加のフラグや設定を適用しているかどうかを疑問に残っています疑いますか?

私のシステムでコンパイルせずにコンパイルすれば、このlibをうまくコンパイルできることに注意してください。 (Linux 32ビット)。

Android用GDALの作成手順(here)を調べるときは、追加設定としてLIBS="-lsupc++ -lstdc++"が使用されます。これはSTLとC++の例外をリンクしますか?私はすぐにようなエラーを取得私のconfigureを実行する前に、それらを設定すると しかし、:

だから、
 
configure:3018: checking whether the C++ compiler works 
configure:3040: arm-linux-androideabi-g++ conftest.cpp -lsupc++ -lstdc++ >&5 
/tmp/android-chain/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: cannot find -lsupc++ 
collect2: ld returned 1 exit status 

を、私は少しこだわっています。誰かアイデア?

答えて

4

NDKにはその機能がないため、swab機能の実装を追加する必要がありました。 その後、これはコンパイル済みです(しかし、私はcrystax ndkを使いました)。

toolwiseの方がよい方法は、Android.mkファイルを使用し、ndk-buildを使用してファイルをコンパイルすることでした。

+0

こんにちは@Peterdkあなたはスワブ機能の実装がどこにあるのか教えていただけますか?あなた自身で書きましたか? – asloob

+0

こんにちは、私はちょうどそれのためにグーグルだと思う。私はそれを自分で書きませんでした。おそらくクリスタックスの検索と組み合わせてもよいでしょう。 – Peterdk

+0

ありがとう!見つけた。 – asloob

2

NDK r7のmake-standalone-toolchain.shが不完全なツールチェーン(libsupc++.aを含むいくつかのライブラリが欠けている)を作成するため、質問の下からリンカエラーが発生します。以前のNDKリリース(r6bはうまくいくはずです)からツールチェーンを作ってみることをお勧めします。

関連する問題