Caused by: java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "_ZTINSt6__ndk18ios_b

当遇到在Android项目中更新库文件后,运行时出现`UnsatisfiedLinkError`,原因是加载库时找不到相应符号。通过检查aar文件、apk中的so库,发现存在同名但不同版本的so库。解决方案包括修改aar源码或处理so文件,避免动态库加载错误。关键在于理解动态库加载机制,并避免使用`multiDexKeepProguard`防止编译错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天更新一个库文件到项目上,编译是正常的,但是运行的时候报了这样一个错:

 Caused by: java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol 
 "_ZTINSt6__ndk18ios_baseE" referenced by 
 "/data/app/com.tclhz.gallery.dev-jbo9-kJFY5CODTEnV86C3g==
 /lib/arm64/libnative-lib.so"...

这个错是由于加载libnative-lib.so这个库的时候找不到相应的符号,这就奇怪了,升级一下库就变成这样了,于是我打开这个库的aar文件,发现里面有两个so文件:

libnative-lib.so
libtensorflowlite.so

那么上面报错的符号_ZTINSt6__ndk18ios_baseE应该是在libtensorflowlite.so这个文件里面,可以使用readelf -s查看符号:

4053: 00000000003b4478    16 OBJECT  GLOBAL DEFAULT   17 _ZTINSt6__ndk18ios_baseE

查看的结果就是有这个符号,既然有这个符号,那么就到apk中去看一看是不是这个库没有被打包进去,果然,解开apk里面确实有libtensorflowlite.so,但是大小不一样,用上面的方式查看符号表也没有找到对应的符号表,因此我断定项目里面可能还有哪个地方也使用到了这个库,在打包的时候&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值