Android NDK R8E缺lessstdlib.h

我正在用Android NDK(android-ndk-r8e)testing一些本地库代码。 本地库正在从它的makefile而不是Android的修改的构build系统构build。 使用makefile而不是Android的构build系统是项目需求(OpenSSL和FIPS)。

该库需要为API 14(Android 4.0),API 16(Android 4.1)和API 17(Android 4.2)构build。 虽然使用了库的makefile,但是我们使用了android-ndk-r8e-linux-x86_64(arm-linux-androideabi-4.7和朋友)的预编译工具链。

看来stdlib.h从3个API中的2个中缺less。 例如,下面是为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 

根据Auselen和Chris的反馈,我试图为API 17构build一个工具链。它失败了:

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

如何处理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 

  • 在java本地接口中调用DeleteLocalRef
  • 如何在Eclipse中包含预build的共享库
  • Android NDK - 使两个本地共享库互相调用
  • Androidvideo通过ffmpeg修剪
  • 如何使用JNI代码正确导入Android库?
  • 定义宏以在android中记录文件和行的错误
  • 如何将系统服务添加到Android Framework
  • Android ICS 4.0 NDK NewStringUTF崩溃了应用程序
  • 你应该从NDK创build一个独立的工具链 ,并使用它来构build你的本地库。 您可能需要在命令行或Makefile中修改像CCLD这样的环境variables来指向这个新的工具链的gcc 。 就像是:

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