Testuję niektóre biblioteki natywnej kodu z Android NDK (Android-ndk-r8e). Natywna biblioteka jest budowana z pliku makefile, a nie z systemu modyfikacji systemu Android. Używanie pliku Makefile zamiast systemu kompilacji systemu Android to wymaganie projektu (OpenSSL i FIPS).Android NDK R8E brakuje stdlib.h
Biblioteka musi być zbudowana dla API 14 (Android 4.0), API 16 (Android 4.1) i API 17 (Android 4.2). Choć używa pliku makefile biblioteki, używamy wstępnie zbudowanego toolchaina z android-ndk-r8e-linux-x86_64 (arm-linux-androideabi-4.7 i przyjaciele).
Wygląda na to, że w 2 z 3 interfejsów API brakuje stdlib.h
. Na przykład, poniżej jest próbą opracowania dla 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
oparciu o informacje zwrotne od Auselen i Chris, starałem się budować toolchain dla API 17. To nie powiodło się:
$ $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
Jak jeden uchwyt brakuje nagłówków w 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
Dziękuję auselen. Korzystamy z wcześniej stworzonego przez AOSP toolchaina z Android-ndk-r8e-linux-x86_64.tar.bz2. Zaktualizowałem pytanie. – jww
Ale czy uruchomiłeś skrypt do samodzielnego tworzenia narzędzi? –
Dzięki Chris. Nie, używamy wstępnie zbudowanych rzeczy z NDK. – jww