我们注意到一些死函数没有从生成的共享对象文件(.so)中删除,该文件是作为发布版本构建的(通过“ndk-build”而没有任何参数)。
为了证明我们引入了一个绝对不在任何地方调用的虚函数(也没有导出,因为默认的可见性已经被设置为整个.so的“隐藏”)。不知何故,虚函数的符号仍然存在,我们可以通过对生成的.so使用“nm”来看到它。
我们在Linux 11.10上使用NDK r8d。
是否有任何特定的编译器/链接器标志需要应用于Android.mk才能删除死代码?
谢谢!
答案 0 :(得分:2)
删除死函数也可以大大减少二进制文件的大小。为此,请更改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