Android studio打包so动态链接库没有符号表问题

什么时符号表?

动态链接库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就添加几个即可

源码环境AOSP下如何编译出带符号表的SO或可执行文件?

通常在AOSP下用Android.mk配置源码及生成的so库或可执行文件,编译后生成的库在out/target/product/car_tcc8050_arm64/system/lib下面,但是这下面默认都是不带符号表的;
那如何编译出带符号表的so库呢?其实和Android studio一样,源码编译一样编译一次会产生debug和release的so库,其中debug就是带符号表的,其路径在:

out/target/product/car_tcc8050_arm64/symbols/

最后可以用工具nm检查是否生成符号表:

nm so或可执行文件

结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅气好男人_Jack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值