微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以从使用Android NDK构建的共享库中删除符号?

我正在构建一个共享库,以便在使用 Android NDK的Java应用程序中使用.使用readelf检查由发布版本生成的lib / armeabi-v7a / libXXXlib.so文件,它似乎包含我的本机C/C++代码的所有符号(函数,变量名称).

实际上,共享对象文件对于调试和发布版本似乎是相同的. (libs文件夹中输出的唯一区别在于是否创建了gsb.setup和gdbserver文件.)我在我的Application.mk中使用APP_CFLAGS = -O3覆盖NDK的优化集,但是我不希望发布版本通过包含-g标志来生成调试符号.

我发现了对SO的评论‘In both cases,debug and release,it leaves the -g flag in because,to quote the comment,“we generate symbol versions of the binaries that are later stripped when they are copied to the final project’s libs/ directory”‘,另一个说明:‘JNI cannot find the functions for java if they don’t have names.’

ndk-build肯定会从obj / armeabi-v7a / libXXXlib.so文件删除一些内容,因为它比最终在libs中创建的文件大得多,但它似乎仍然保留了我的所有函数和变量的名称.文件.

JNI是否需要我所有的函数名称(而不仅仅是本机代码的入口点)?

如果没有,我该如何删除不需要的符号?

解决方法

您可以随意设置认的visibility = hidden,并为Windows中需要导出的少数函数设置属性visibility = default(类似于DLLEXPORT)

原文地址:https://www.jb51.cc/android/309579.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐