NDK r12b下编译安卓FFmpeg arm64架构出现的奇葩问题
来源:互联网 发布:苹果越狱会清除数据吗 编辑:程序博客网 时间:2024/06/04 19:57
FFmpeg编译执行脚本sh执行生成其静态库 .a 文件,一路顺风,没出现任何问题;但在静态库打包入动态库so文件的时候报错。折腾了三个小时;最终解决。这里做下记录防止后面忘记。首先贴上静态库打包动态库so的脚本:
function build_one_lite {echo -e "\033[32m Starting build one lite for $ARCH and cpu-$CPU \033[0m"cd ffmpeg${LD} -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -L$PREFIX/lib -soname $SONAME -shared -nostdlib -z noexecstack -Bsymbolic
--whole-archive --no-undefined -o $OUT_LIBRARY -lavcodec -lavformat -lavutil -lswresample -lswscale -lfastvox -lc -lm -lz -ldl -llog
--dynamic-linker=/system/bin/linker -zmuldefs $PREBUILT/lib/gcc/$EABIARCH/4.9.x/libgcc.acd ..echo -e "\033[32m FINISHED build one lite $ARCH and cpu-$CPU \033[0m"}
出现的错误:
/usr/local/android/ndk/r12b/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-ld skipping incompatible......
cannot find libavutil.a
查阅路径,libavutil.a存在的呀,怎么会说找不到呢,郁闷了半天,各种检查想到底哪里出错;期间忽略了一个重要的提示,那就是skipping incopatible 文字,报这样错误的问题实质是链接库文件时,库文件版本与平台版本不对应的问题;
OK 解决办法:
1、用以下命令查看该静态库文件的版本信息,是32位的还是64位的
objdump -p libavutil.a执行命令后显示结果:
[root@localhost lib]# objdump -p libavutil.a In archive libavutil.a:strtod.o: file format elf32-littlecpu.o: file format elf64-littlefloat_dsp_init.o: file format elf64-littlefloat_dsp_neon.o: file format elf64-littleadler32.o: file format elf64-littleaes.o: file format elf64-littleaes_ctr.o: file format elf64-little2、请仔细看第一条,很重要
strtod.o: file format elf32-little
看到他,他妈神奇了,牛逼了,咋执行arm64的命令还能生成32位的???就是这个32位的导致链接失败!!!!!
3、好了,那到底是什么原因的,又百度、又google,可能他妈前几次关键词没搜对,浪费了好长时间;
后来我直接IDE里全局搜索找到了strtod.d和 strtod.o文件,并且这个文件还提交到了svn,想了想不对,这个文件应该是编译时自动生成的,不应该提交到svn呀,哦,答案出来了,FFmpeg在编译时,如果strtod.c文件已编译,那就略过,(不会自动clean 这两个文件),导致我在编译arm64的时候,还是使用的32位的arm架构的strtod.d和 strtod.o文件。
4、至此解决办法大家都知道了吧,不要手动清楚,最好是写一个脚本,在编译各个cpu架构的版本前执行清理操作;
cd ffmpeg/compatrm -rf strtod.drm -rf strtod.ocd ../../
阅读全文
0 0
- NDK r12b下编译安卓FFmpeg arm64架构出现的奇葩问题
- ndk arm64编译遇到问题
- ffmpeg在arm64下编译
- NDK下编译FFMPEG
- ffmpeg NDK编译问题
- ndk编译出现的问题
- 编译ffmpeg出现的问题
- ndk编译 ffmpeg 1.1.1 出现libavutil/time.h 和系统的time.h 冲突问题 ;
- 使用Eclipse+NDK编译arm64-v8a CPU架构的speex.so文件
- 使用Eclipse+NDK编译arm64-v8a CPU架构的speex.so文件
- 使用Eclipse+NDK编译arm64-v8a CPU架构的speex.so文件
- android ndk下编译ffmpeg
- android下ndk编译ffmpeg
- Android NDK 编译FFMPEG 问题
- cygwin下ndk arm交叉编译器编译ffmpeg遇到的问题(1)
- NDK学习(5) 安卓平台下 NDK编译lua
- FFmpeg编译出现问题
- 编译ffmpeg neon时出现的问题
- Dubbo+Zookeeper+Maven+Idea 入门搭建笔记
- 2017 ACM/ICPC Asia Regional Shenyang Online
- scala之对象
- php实现无限极分类
- matter.js学习笔记(二)--Composites.stack()分析
- NDK r12b下编译安卓FFmpeg arm64架构出现的奇葩问题
- iOS 局部跑马灯效果实现
- mysql 练习
- 项目导入时报错:The import javax.servlet.http.HttpServletRequest cannot be resolved
- C/S与B/S
- stm32 can中断通信
- 一、流程控制与数组
- Linux Shell脚本攻略2:命令之乐(2)
- java第一课