我正构建一个包含{.1}}和armeabi
的单独* .so库的胖APK。我仅使用命令行构建(即使用armeabi-v7a
和ndk-build
)。有没有办法从我的C代码中检测ant
当前是为ndk-build
还是为armeabi
构建的?最好,我希望能够在编译时检测到这一点,但如果没有其他选择,运行时的体系结构检测也就足够了。
E.g。有什么像
armeabi-v7a
在编译时检测架构?
我知道我可以在#ifdef __armeabiv7a__
...
#else
...
#endif
的{{1}}中传递额外的编译器标志,但这些标志总是针对所有架构传递,因此它对我没有帮助。或者我是否可以在LOCAL_CFLAGS
中使用标记来仅传递Android.mk
或Android.mk
的特定标记?
答案 0 :(得分:2)
我知道我可以在Android.mk中的
LOCAL_CFLAGS
中传递额外的编译器标志,但这些标志总是在所有架构中传递
只有在为某个ABI构建时才会阻止您设置标记:
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
LOCAL_CFLAGS += -DARMEABI_V7A
endif
答案 1 :(得分:1)
至少gcc提供了一些可以检查的预定义宏,以获取有关当前ABI的信息。对于这种情况,您可以检查以下内容:
#if defined(__ARM_ARCH) && __ARM_ARCH >= 7
或者这个:
#ifdef __ARM_ARCH_7A__
通过迈克尔的建议在makefile中手动设置这些,你不需要跟踪那些不同的ABI宏,并且如果转移到没有&的编译器,则进入非预期情况的风险会降低。 #39; t具有相同的预定义宏(例如MSVC编译器,尽管你不会在Android上使用它)。