什么时符号表?
动态链接库so文件结构是由一个个Section段构成,一般来说在文件最后会附件一个符号表段,描述其他段对应的函数、变量等符号,当so执行错误时,就会打印so有函数、变量等具体的堆栈符号信息,而不是一堆二进制数据;
当然,这附加的符号表并不是执行必须的,可以去除掉,而且一般也是去除掉!否则so库size会特别大
为什么Android studio生成的so不带符号表
起初查询了网上的资料都是在cmakelist里面去:
set(CMAKE_BUILD_TYPE DEBUG)
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -g")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -g")
遗憾的是,也没生效!
查看Android studio的build so的记录,发现带有一个strip开头的任务,不难猜出,这个task就是去除so符号表的任务; 所以去不去so的符号表和上面的set方法没关系,set是编译时命令,而strip的task则时Android的任务; 在build的目录下也可以找到编译的so里面时带有符号表的;
最终打包方法是,在build的android{}里面添加:
packagingOptions {
doNotStrip "*/armeabi-v7a/*.so"
}
有几个so就添加几个即可
|