移植Android P和Q的程序到Android P后提示cannot locate symbol “fgets_unlocked“
·
1、提示错误如下:

2、网上各种查原因:
有的说是用ndk r21d可以编译过去

有的是ffmpeg移植遇到这种问题,设置api level为21可以过去,或者configure的时候加上--disable-asm可以过去
3、为此,我将ndk 18到21都下载了,分别做成交叉编译链,结果测试还是不行
4、这个问题卡了我三天,最后,只能用笨方法了
5、我们是android程序编译的时候假如了libxxxa.so,编译libxxxa.so需要关联libxxxb.so,libxxxb.so是同事提供的
6、首先aarch64-linux-android-nm -D libxxxa.so找到里面有fgets_unlocked,然后我就找编译链里面的libc.so,看里面是否有fgets_unlocked,结果发现platform小于等于27的libc.so里面没有这个函数,大于27的libc.so里面有
7、将车机上的libc.so拿下来,用arch64-linux-android-nm查看同样没有fgets_unlocked,所以可以确定,libxxxa.so用错编译链了
8、用aarch64-linux-android-nm查libxxxb.so,里面也有fgets_unlocked,让同事把用到fgets的地方全部关闭,再重新编译libxxxb.so和libxxxa.so,测试发现没有问题了。
9、最后同事发现他环境变量设错了,卧槽
写这个算是提供一种思路吧,哈哈。。。
更多推荐
所有评论(0)