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

前端之家收集整理的这篇文章主要介绍了是否可以从使用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相关文章