是否可以从使用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)

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...