gpt4 book ai didi

android - 可执行二进制文件无法在 android marshmallow 上运行

转载 作者:行者123 更新时间:2023-11-29 17:26:17 25 4
gpt4 key购买 nike

我在 Android 上使用共享库构建了 ffmpeg 可执行二进制文件。但是当我在 Marshmallow 上运行它时,出现以下错误,可执行文件无法运行。

$ LD_LIBRARY_PATH=./lib ./bin/ffmpeg
CANNOT LINK EXECUTABLE: cannot find "libavformat.so" from verneed[0] in DT_NEEDED list for "./bin/ffmpeg"
page record for 0xb6eee00c was not found (block_size=16)

我在编译二进制文件时已经添加了--extra-ldexeflags="-pie"

可执行二进制文件在 Marshmallow 之前的设备上正常运行。

我以前没有遇到过这样的问题,我是不是漏掉了什么重要的东西?我怎样才能让这个二进制文件在 Marshmallow 上运行?

有关我的环境的更多信息。

我将 android-ndk-r10e

一起使用

SYSROOT=$ANDROID_NDK_ROOT/platforms/android-19/arch-arm 工具链版本为

arm-linux-androideabi-gcc (GCC) 4.9 20140827(预发布)

如果我将 ffmpeg 构建为单个可执行二进制文件(构建静态库,然后构建为二进制文件),它会正常运行。

最佳答案

经过大量搜索,我在 here 中发现了类似的问题.我的共享库有问题。

FFmpeg build script disable SONAME for android build,因此在通过命令读取库时没有找到SONAME

arm-linux-androideabi-readelf -d libavutil.so |grep soname

像下面这样更改配置脚本,它将起作用。

    android)
disable symver
enable section_data_rel_ro
SLIB_INSTALL_NAME='$(SLIBNAME)'
SLIB_INSTALL_LINKS=
# soname not set on purpose
# soname should set for new version Android
SHFLAGS='-shared -Wl,-soname,$$(word 1,$$(subst ., ,$$(@F))).so'
# SHFLAGS=-shared

然后重新编译ffmpeg生成共享库,得到了我想要的结果,

$ arm-linux-androideabi-readelf -d libavutil.so |grep soname
0x0000000e (SONAME) Library soname: [libavutil.so]

然后,可执行二进制文件正常运行。

关于android - 可执行二进制文件无法在 android marshmallow 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34492583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com