2016-07-01 8 views
4

Android NDK r12を見ると、platforms/android- {API level}/{arch}/usr/include/sysのヘッダファイルに違いがあることがわかります。 APIレベル19およびそれ以下では、ファイルexec_elf.hは存在しますが、それ以降は削除されたようです。そこのファイルが追加または削除された他の多数の相違点がありますが、それは特定のマクロを定義するので、私はexec_elf.hに興味がある:exec_elf.hがAndroid NDKから削除されたのはなぜですか?

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

このマクロは、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 

私ができる私は19ビルド後に何も設定APIの対象とツールチェーンを使用する場合はICUのコンパイルビルドは、これらのエラーで失敗失敗しますpkg_genc.cの先頭にELF64_ST_INFOの定義を追加することでビルドを成功させることができます。そのため、Androidシステムヘッダでこのマクロの定義が不足していることが問題であることはかなり肯定的です。なぜこれがAPIレベルで変更されたのか誰にも分かりますか?これは意図的な違いか、これはNDKのバグですか?

+0

あなたの質問はどこか別の答えがありますか? – mgautierfr

+0

@mgautierfrいいえ、私は決してこれに答えました。私は誇りに思っていませんが、ELF64_ST_INFOを定義するためのハックはうまくいきました。 –

答えて

2

これはNDKのバグでした。バグを報告することの重要性を説明するために、これは8時間前に提出されました。事前に提出する修正があります:https://github.com/android-ndk/ndk/issues/377。この修正は、I/O(5月17日)に予定されているr15 beta 2で利用可能になるはずです。

+0

NDK r15にはまだこの修正が含まれていません。それはNDK r15bに含まれますか? – pelya

+0

https://gist.github.com/DanAlbert/918b8834efcb0a472657688ea5b67b​​82は私のために働いています –

+0

grep -r ELF64_ST_INFO android-ndk-r15/platforms/android-21は私に結果を提供しません、NDKはここからダウンロードします:https://dl.google .com/android/repository/android-ndk-r15-linux-x86_64.zip and platforms/android-19にはこの定義が含まれています – pelya

関連する問題