[英]Is it possible to remove symbols from a shared library built with Android NDK?
[英]Dead function is not removed from the shared object built from Android NDK
我們注意到,生成的共享對象文件(.so)中沒有刪除一些死函數,這些文件是作為發布版本構建的(通過“ndk-build”而沒有任何參數)。
為了證明我們引入了一個絕對不會在任何地方調用的虛函數(並且也沒有導出,因為默認可見性已經被設置為整個.so的“隱藏”)。 不知何故,虛函數的符號仍然存在,我們可以通過對生成的.so使用“nm”來看到它。
我們在Linux 11.10上使用NDK r8d。
是否有任何特定的編譯器/鏈接器標志需要應用於Android.mk才能刪除死代碼?
謝謝!
刪除死函數也可以大大減少二進制大小。 為此,請更改Android.mk
C和C ++編譯標志以及鏈接器標志。
LOCAL_CPPFLAGS += -ffunction-sections -fdata-sections
LOCAL_CFLAGS += -ffunction-sections -fdata-sections
LOCAL_LDFLAGS += -Wl,--gc-sections
此外,GCC中的visibility
功能可能會有所幫助。 http://gcc.gnu.org/wiki/Visibility
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.