我有一个名为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不会导出任何函数?
答案 0 :(得分:1)
问题解决了,我发现原因是包装器模块只调用core.cpp中的代码而不是core2.cpp,因此优化器清理死代码。要防止它,请使用LOCAL_WHOLE_STATIC_LIBRARIES而不是LOCAL_STATIC_LIBRARIES
替换
LOCAL_STATIC_LIBRARIES := core
由此
LOCAL_WHOLE_STATIC_LIBRARIES := core