我的具体问题是我需要在具有一个共享库(JNI接口)和两个静态库的项目中使用Android的“cpufeatures”库(在NDK中的docs / CPU-FEATURES.html中描述)。 / p>
共享库不直接使用cpufeatures库,而是在其中一个静态库中使用。
cpufeatures是一个Android'导入模块'。使用导入模块非常简单,只需要以下步骤(来自NDK的r8e版本的CPU-FEATURES.html):
列出静态库依赖项列表中的“cpufeatures”,如:
LOCAL_STATIC_LIBRARIES := cpufeatures
在Android.mk的最后,导入'android / cpufeatures'模块,如:
$(call import-module,android/cpufeatures)
在源代码中,包含名为
的标头
但是,如果我将cpufeatures添加到主库的LOCAL_STATIC_LIBRARIES中,cpufeatures的包含路径仅在构建主库时可用,而不是在构建静态库时可用,因此编译失败。
cpufeature的Android.mk和this related answer的内容一起表明,可以将LOCAL_STATIC_LIBRARIES添加到共享库本身,如下所示:
...
include $(CLEAR_VARS)
LOCAL_MODULE := CommonClasses
LOCAL_CFLAGS := $(MY_CFLAGS)
LOCAL_C_INCLUDES += $(MY_COMMON_C_INCLUDES)
LOCAL_STATIC_LIBRARIES := cpufeatures
LOCAL_SRC_FILES := \
$(wildcard $(MY_COMMON_CLASSES_SRC_PATH)/*.cpp) \
...
$(wildcard $(MY_COMMON_CLASSES_SRC_PATH)/sound/*.cpp)
include $(BUILD_STATIC_LIBRARY)
...
$(call import-module,android/cpufeatures)
而且,确实有效,我现在可以在作为静态库的一部分编译的源文件中包含这样的库头:
#include <cpu-features.h>
我要问的原因是,将静态库与另一个静态库链接起来是没有意义的。但是,似乎LOCAL_STATIC_LIBRARIES的语义更抽象。
这是正确的方法吗,即我可以期待这种情况继续发挥作用,而不会在以后引起我意想不到的不满吗?