2016-07-14 6 views
2

caught a report私たちのプロジェクトをAutotoolsでAndroidに移植しようとしている人が。私たちのプロジェクトはSTLを使用するC++ライブラリであり、Androidは開発者にC++およびSTLライブラリを選択させます。プロジェクトはmakefileベースで、Autotoolsは使用しません。代わりに、それはpublished procedures for cross-compiling for Androidです。AndroidでSTLライブラリを指定する方法は?

the reportの推力は、ヘッダチェックに失敗しました。 Autotoolsがチェックを実行するときにSTLライブラリを使用しなかったため、失敗したと考えられます。 STLライブラリは--sysrootと若干異なります。 Sysrootには多くのヘッダーとライブラリが含まれますが、ユーザーが選択する必要があるため、STLヘッダーやライブラリは含まれません。

対象を設定するときに、Androidで特定のSTLライブラリを使用するようにAutotoolsに指示する方法を知りたいと思います。

+0

をSYSROOTだため、スタンドアロンのツールチェーンを使用することを教え質問はAutoconfのメーリングリストで尋ねたが、誰も答えませんでした。 [C++ STL library for Android?](http://lists.gnu.org/archive/html/autoconf/2016-07/msg00003.html) – jww

+0

最新のNDKから 'make_standalone_toolchain.py'を使うことをお勧めしますリリース。 '--stl =​​'でSTL実装を選択します。 –

+0

そのプロジェクトでは、 'setenv-android.sh'の2番目の引数でSTLを選択したようです:https://github.com/weidai11/cryptopp/blob/master/setenv-android.sh#L268 –

答えて

1

答えは、スタンドアロンツールチェーンとオートツールの両方を使用することです。たとえば、汎用アームabiの場合は、C++ stl(gnuはデフォルト)を使用します。

1)まず、必要な--stlオプションを使用してスタンドアロンツールチェーンを作成します。

$> ${ANDROID_NDK_ROOT}/build/tools/make-standalone-toolchain.sh --toolchain=arm-linux-androideabi-4.9 --stl=libc++ --platform=android-21 --install-dir=${PWD}/tools/ --force 

2)は$ TRIPLEのenv varが

${TRIPLE}-cc 
${TRIPLE}-ld 
ような名前のツールをチェックするように設定するために有用である)ので、ツール

export PATH=${PWD}/tools/bin:${PATH} 

2aに見つけることができる構成パスにツールチェインを置きます

上記のbinディレクトリのツールには、 "arm-linux-androideabi"という接頭辞が付いています。したがって、TRIPLEを設定してください。この例では、それはあなたが$ TRIPLEを設定したくない場合は、あなたがCCを設定する必要があり、CXX、およびCPPのENVは、あなたの新しいツールチェーンのbinディレクトリにバージョンを指すようにvarsの、または

export TRIPLE=arm-linux-androideabi 

2b)があります設定するためにそれらを渡します(私は方法を知らない)。

3)最終的にはautotoolsのを実行し、それが

$>./configure --with-sysroot=${PWD}/tools/sysroot --host=${TRIPLE} ... 
関連する問題