gpt4 book ai didi

android - 死函数不会从 Android NDK 构建的共享对象中删除

转载 作者:太空狗 更新时间:2023-10-29 13:31:03 27 4
gpt4 key购买 nike

我们注意到一些死函数没有从生成的共享对象文件 (.so) 中删除,该文件是作为发布构建的(通过不带任何参数的“ndk-build”)。

为了证明我们引入了一个绝对不会在任何地方调用的虚拟函数(并且也不会导出,因为整个 .so 的默认可见性已经设置为“隐藏”)。不知何故,虚拟函数的符号仍然存在,我们可以通过对生成的 .so 使用“nm”来查看它。

我们在 Linux 11.10 上使用 NDK r8d。

我们是否需要将任何特定的编译器/链接器标志应用到 Android.mk 以删除无效代码?

谢谢!

最佳答案

删除死函数也可以大大减少二进制文件的大小。为此,更改 C 和 C++ 编译标志以及 Android.mk 中的链接器标志。

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

关于android - 死函数不会从 Android NDK 构建的共享对象中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15399113/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com