Android NDK调用共享库中的静态库的API

时间:2016-04-29 03:18:58

标签: android c++ android-ndk static-libraries

我有一个名为libwrapper.so的共享库,这个库反过来使用另一个名为libcore.a的静态库。这是Android.mk

## core module
include $(CLEAR_VARS)
LOCAL_MODULE := core
MY_SRC_DIR := src
MY_SRC_FILES := core.cpp core2.cpp
LOCAL_SRC_FILES := $(addprefix $(MY_SRC_DIR)/, $(MY_SRC_FILES))
include $(BUILD_STATIC_LIBRARY)


## wrapper module
include $(CLEAR_VARS)
LOCAL_MODULE := wrapper
MY_SRC_DIR := src
MY_SRC_FILES := wrapper.cpp
LOCAL_SRC_FILES := $(addprefix $(MY_SRC_DIR)/, $(MY_SRC_FILES))
LOCAL_STATIC_LIBRARIES := core
include $(BUILD_SHARED_LIBRARY)

奇怪的是,当我使用命令“nm -D libwrapper.so”时,只能看到core.cpp中那些函数的符号。为什么core2.cpp不会导出任何函数?

1 个答案:

答案 0 :(得分:1)

问题解决了,我发现原因是包装器模块只调用core.cpp中的代码而不是core2.cpp,因此优化器清理死代码。要防止它,请使用LOCAL_WHOLE_STATIC_LIBRARIES而不是LOCAL_STATIC_LIBRARIES

替换

LOCAL_STATIC_LIBRARIES := core

由此

LOCAL_WHOLE_STATIC_LIBRARIES := core