在Android.mk中的静态库中使用LOCAL_STATIC_LIBRARIES是否可以?

时间:2013-07-12 10:34:39

标签: build android-ndk

我的具体问题是我需要在具有一个共享库(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的语义更抽象。

这是正确的方法吗,即我可以期待这种情况继续发挥作用,而不会在以后引起我意想不到的不满吗?

0 个答案:

没有答案