2016-04-29 3 views
0

Ich habe eine gemeinsam genutzte Bibliothek namens libwrapper.so, diese Bibliothek verwendet wiederum eine andere statische Bibliothek namens libcore.a. Hier ist die Android.mkAndroid NDK Aufruf API einer statischen Bibliothek in einer gemeinsamen Bibliothek

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

Das Merkwürdige ist, wenn ich Befehl „nm -D libwrapper.so“ nur Symbole dieser Funktionen in core.cpp zu sehen sind. Warum core2.cpp keine Funktion exportiert?

Antwort

1

Problem sovled, ich fand, dass der Grund Wrapper-Modul nur Aufrufe von core.cpp nicht core2.cpp, daher Optimierer sauberen toten Code. Um dies zu verhindern, verwenden Sie LOCAL_WHOLE_STATIC_LIBRARIES statt LOCAL_STATIC_LIBRARIES

ersetzen

LOCAL_STATIC_LIBRARIES := core 

durch diese

LOCAL_WHOLE_STATIC_LIBRARIES := core