我正在构建一个共享库,以便在使用
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是否需要我所有的函数名称(而不仅仅是本机代码的入口点)?
如果没有,我该如何删除不需要的符号?