查看Android NDK r12,我可以看到在platforms / android- {API level} / {arch} /usr/include / sys下的头文件存在差异.对于API级别19及以下,文件exec_elf.h存在,但在此之后似乎已被删除.添加或删除文件有许多其他差异,但我对exec_elf.h感兴趣,因为它定义了一个特定的宏:

#define ELF64_ST_INFO(b,t) (((b) << 4) + ((t) & 0xf))

这个宏用在ICU源代码中,如果我使用的工具链将API目标设置为19之后的任何内容,那么我的交叉编译的ICU构建将失败.构建失败并出现以下错误:

arm-linux-androideabi-clang ... icu/source/tools/toolutil/pkg_genc.c

icu/source/tools/toolutil/pkg_genc.c:869:13: warning: implicit declaration of function 'ELF64_ST_INFO' is invalid in C99 [-Wimplicit-function-declaration]

ELF64_ST_INFO(STB_GLOBAL, STT_OBJECT),

^

icu/source/tools/toolutil/pkg_genc.c:869:13: error: initializer element is not a compile-time constant

ELF64_ST_INFO(STB_GLOBAL, STT_OBJECT),

^~~~~~~~~~~~~~~~~~~

icu/source/tools/toolutil/pkg_genc.c:987:13: error: initializer element is not a compile-time constant

ELF64_ST_INFO(STB_GLOBAL, STT_OBJECT),

编译行如下:

android-toolchain/bin/arm-linux-androideabi-clang -D_REENTRANT -DU_HAVE_ELF_H=1 \

-DU_HAVE_ATOMIC=1 -Iicu/source/common -Iicu/source/i18n \

-DU_BUILD="x86_64-apple-darwin15.2.0" -DU_HOST="arm-unknown-linux-androideabi" \

-DU_CC="android-toolchain/bin/arm-linux-androideabi-clang" \

-DU_CXX="android-toolchain/bin/arm-linux-androideabi-clang++" \

-DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit \

-DU_ATTRIBUTE_DEPRECATED= -DU_TOOLUTIL_IMPLEMENTATION -O3 -O2 -pipe -fsigned-char \

-fPIC -D__ANDROID__ -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -std=c99 \

-Wall -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -c \

-DPIC -fPIC -o pkg_genc.o icu/source/tools/toolutil/pkg_genc.c

我可以通过在pkg_genc.c的顶部添加ELF64_ST_INFO的定义来使构建成功,所以我非常肯定Android系统头中缺少此宏的定义是个问题.有谁知道为什么这会在API级别上发生变化?这是有意的,或者这是NDK中的错误?

解决方法:

这是NDK中的一个错误.为了说明提交错误的重要性,这是在8小时前提交的,我们已经通过预先提交修复:https://github.com/android-ndk/ndk/issues/377.修复程序应该在r15 beta 2中提供,将在I / O(5月17日)发布.

标签:android,android-ndk

来源: https://codeday.me/bug/20190702/1353766.html

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐