2013-06-18 23 views
9

Ich teste einige native Bibliothekscode mit dem Android NDK (Android-ndk-r8e). Die native Bibliothek wird aus ihrem Makefile und nicht aus dem modifizierten Build-System von Android erstellt. Die Verwendung des Makefiles anstelle des Build-Systems von Android ist eine Projektanforderung (OpenSSL und FIPS).Android NDK R8E fehlt stdlib.h

Die Bibliothek muss für API 14 (Android 4.0), API 16 (Android 4.1) und API 17 (Android 4.2) erstellt werden. Obwohl wir das Makefile der Bibliothek benutzen, benutzen wir die vorgefertigte Toolchain von android-ndk-r8e-linux-x86_64 (arm-linux-androideabi-4.7 und Freunde).

Es scheint stdlib.h fehlt von 2 der 3 APIs. Zum Beispiel ist unten ein Versuch für 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 

Basierend auf dem Feedback von Auselen und Chris zu kompilieren, habe ich versucht, Werkzeuge für die API zu bauen 17. Es ist fehlgeschlagen:

$ $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 

Wie funktioniert ein Handle fehlende Header im 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 

Antwort

4

Sie sollten eine standalone toolchain von NDK, erstellen und diese verwenden Ihre native Bibliothek zu bauen. Sie müssen wahrscheinlich Umgebungsvariablen wie CC, LD in der Befehlszeile oder in Makefile ändern, um auf die neue Toolchain gcc zu zeigen. Etwas wie:

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

Danke auselen. Wir verwenden AOSPs vorgefertigte Toolchain von android-ndk-r8e-linux-x86_64.tar.bz2. Ich habe die Frage aktualisiert. – jww

+0

Aber hast du das Skript für eine eigenständige Toolchain ausgeführt? –

+0

Danke Chris. Nein, wir verwenden das vorgefertigte Zeug aus dem NDK. – jww