簡體   English   中英

不會從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM