2013-06-18 22 views
9

私はAndroid NDK(android-ndk-r8e)でいくつかのネイティブライブラリコードをテストしています。ネイティブライブラリは、Androidの変更されたビルドシステムではなく、メークファイルから構築されています。 Androidのビルドシステムではなくメークファイルを使用することは、プロジェクト要件(OpenSSLとFIPS)です。Android NDK R8Eがありませんstdlib.h

ライブラリは、API 14(Android 4.0)、API 16(Android 4.1)、およびAPI 17(Android 4.2)用にビルドする必要があります。ライブラリのmakefileを使用していますが、私たちはandroid-ndk-r8e-linux-x86_64(arm-linux-androideabi-4.7およびfriends)の組み込みツールチェーンを使用しています。

stdlib.hが3つのAPIのうち2つに欠けているようです。

$ $ANDROID_NDK_ROOT/build/tools/make-standalone-toolchain.sh --platform=android-17 --install-dir=./android-testAuto-config: --toolchain=arm-linux-androideabi-4.6 
Invalid platform name: android-17 
Please use --platform=<name> with one of: android-14 android-3 android-4 android-5 android-8 android-9 

を行う方法:たとえば、以下のAuselenとクリスからのフィードバックに基づいて、API 17

arm-linux-androideabi-gcc -I. -I.. -I../include -DOPENSSL_FIPSCANISTER -fPIC -DOPENSSL_PIC 
-DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,--noexecstack -march=armv7-a 
-mandroid -I/opt/android-ndk-r8e/platforms/android-17/arch-arm/usr/include 
-B/opt/android-ndk-r8e/platforms/android-17/arch-arm/usr/lib -O3 -fomit-frame-pointer -Wall 
-DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DAES_ASM 
-DGHASH_ASM -c -o cryptlib.o cryptlib.c 
In file included from cryptlib.c:117:0: 
cryptlib.h:62:20: fatal error: stdlib.h: No such file or directory 

用にコンパイルしようとする試みがある、私はそれが失敗したAPI 17のためのツールチェーンを構築しようとしましたNDKのヘッダーが欠落していますか?


$ find /opt/android-ndk-r8e/ -iname stdlib.h 
/opt/android-ndk-r8e/platforms/android-5/arch-arm/usr/include/stdlib.h 
/opt/android-ndk-r8e/platforms/android-14/arch-mips/usr/include/stdlib.h 
/opt/android-ndk-r8e/platforms/android-14/arch-x86/usr/include/stdlib.h 
/opt/android-ndk-r8e/platforms/android-14/arch-arm/usr/include/stdlib.h 
/opt/android-ndk-r8e/platforms/android-9/arch-mips/usr/include/stdlib.h 
/opt/android-ndk-r8e/platforms/android-9/arch-x86/usr/include/stdlib.h 
/opt/android-ndk-r8e/platforms/android-9/arch-arm/usr/include/stdlib.h 
/opt/android-ndk-r8e/platforms/android-8/arch-arm/usr/include/stdlib.h 
/opt/android-ndk-r8e/platforms/android-4/arch-arm/usr/include/stdlib.h 
/opt/android-ndk-r8e/platforms/android-3/arch-arm/usr/include/stdlib.h 
/opt/android-ndk-r8e/sources/cxx-stl/stlport/stlport/stdlib.h 
/opt/android-ndk-r8e/sources/cxx-stl/gnu-libstdc++/4.6/include/tr1/stdlib.h 
/opt/android-ndk-r8e/sources/cxx-stl/gnu-libstdc++/4.7/include/tr1/stdlib.h 
/opt/android-ndk-r8e/sources/cxx-stl/gnu-libstdc++/4.4.3/include/tr1/stdlib.h 

答えて

4

あなたはNDKからstandalone toolchainを作成し、あなたのネイティブライブラリを構築するために1つを使用する必要があります。 コマンドラインでCC,LDなどの環境変数を変更するか、この新しいツールチェインのgccを指すようにMakefile内で環境変数を変更する必要があります。次のようなもの:

CC="arm-linux-androideabi-gcc --sysroot=$SYS_ROOT" 
LD="arm-linux-androideabi-ld" 
+0

ありがとうございました。私たちはandroid-ndk-r8e-linux-x86_64.tar.bz2のAOSPのツールチェーンを使用しています。私は質問を更新しました。 – jww

+0

しかし、スタンドアローンのツールチェーンを作成するためのスクリプトを実行しましたか? –

+0

Chrisに感謝します。いいえ、私たちはNDKの事前構築物を使用しています。 – jww

関連する問題