2023-01-19 362
我正在使用Android NDK(Android-NDK-R8E)测试一些本机库代码.本地库是由其Makefile而不是Android修改的构建系统构建的.使用MakeFile而不是Android的构建系统是项目要求(OpenSSL和FIPS).
需要为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和朋友)的预构建工具链.
在3个API中的2个中似乎缺少stdlib.h.例如,以下是用于编译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构建工具链.它失败了:
$ $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
您应该创建一个工具链来自NDK,并使用该工具链来构建本机库.
您可能需要修改命令行上CC,LD之类的环境变量,以指向此新工具链的gcc.类似:
CC="arm-linux-androideabi-gcc --sysroot=$SYS_ROOT"
LD="arm-linux-androideabi-ld"
以上所述是小编给大家介绍的Android NDK R8E缺少stdlib.h,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/25838.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态