首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android R8E缺少stdlib.h

Android R8E缺少stdlib.h
EN

Stack Overflow用户
提问于 2013-06-18 03:03:07
回答 1查看 8.4K关注 0票数 10

我正在用Android (Androd-NDK-r8e)测试一些本机库代码。本机库是从makefile构建的,而不是Android修改后的构建系统。使用makefile而不是Android的构建系统是一个项目需求(OpenSSL和FIPS)。

库需要为API 14 (Android4.0)、API 16 (Android4.1)和API 17 (Android4.2)构建。虽然它使用了库的makefile,但我们使用的是从Android-NDK-r8e-Linux86_64 (arm-linux-androideabi-4.7和朋友)预先构建的工具链。

3种API中的2种似乎缺少stdlib.h。例如,下面是对API 17进行编译的尝试。

代码语言:javascript
复制
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构建一个工具链。它失败了:

代码语言:javascript
复制
$ $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中丢失的标头?

代码语言:javascript
复制
$ 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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-18 10:51:05

您应该从NDK创建一个独立工具链,并使用它构建您的本机库。您可能需要修改环境变量,如CC、命令行上的LD或Makefile内的环境变量,以指向这个新工具链的gcc。类似于:

代码语言:javascript
复制
CC="arm-linux-androideabi-gcc --sysroot=$SYS_ROOT"
LD="arm-linux-androideabi-ld"
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17159910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档