2016-04-29 106 views
0

我有一個名爲libwrapper.so的共享庫,這個庫反過來使用另一個名爲libcore.a的靜態庫。這裏是Android.mk共享庫內的靜態庫的Android NDK調用API

## 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) 

奇怪的是,當我使用命令「納米-D libwrapper.so」僅在core.cpp那些功能的符號看出。爲什麼core2.cpp不導出任何功能?

回答

1

問題解決了,我發現原因是wrapper模塊只調用core.cpp中的代碼而不是core2.cpp,因此優化器清理了死代碼。爲了防止這種情況,使用LOCAL_WHOLE_STATIC_LIBRARIES代替LOCAL_STATIC_LIBRARIES

LOCAL_WHOLE_STATIC_LIBRARIES := core 
更換

LOCAL_STATIC_LIBRARIES := core