ffmpeg项目编译出错问题解决方案.
1. 链接静态库先后顺序不正确,引起的符号定义找不到
libavformat/utils.c:513: error: undefined reference to 'av_parser_close'
libavformat/utils.c:518: error: undefined reference to 'avcodec_parameters_to_context'
libavformat/utils.c:525: error: undefined reference to 'avcodec_parameters_to_context'
libavformat/utils.c:4342: error: undefined reference to 'av_parser_close'
libavformat/utils.c:4345: error: undefined reference to 'av_packet_unref'
libavformat/utils.c:4348: error: undefined reference to 'avcodec_free_context'
libavformat/utils.c:4350: error: undefined reference to 'av_bsf_free'
libavformat/utils.c:4354: error: undefined reference to 'av_bsf_free'
libavformat/utils.c:4355: error: undefined reference to 'av_packet_free'
libavformat/utils.c:4360: error: undefined reference to 'avcodec_parameters_free'
libavformat/utils.c:4365: error: undefined reference to 'avcodec_free_context'
...
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
解决方案:
1.修改静态库的链接顺序。
target_link_libraries(native-libavfilter avformat avcodec avutil swresample swscalelog)
2.忽略静态库的链接顺序。
target_link_libraries(native-lib-Wl,--start-groupavcodec avfilter avformat avutil swresample swscale-Wl,--end-grouplog)
2. 找不到的z库中的符号
libavformat/http.c:1649: error: undefined reference to 'inflateEnd'
libavformat/http.c:680: error: undefined reference to 'inflateEnd'
libavformat/http.c:681: error: undefined reference to 'inflateInit2_'
libavformat/http.c:686: error: undefined reference to 'zlibCompileFlags'
libavformat/http.c:1428: error: undefined reference to 'inflate'
libavformat/id3v2.c:1023: error: undefined reference to 'uncompress'
libavformat/matroskadec.c:1402: error: undefined reference to 'inflateInit_'
libavformat/matroskadec.c:1410: error: undefined reference to 'inflateEnd'
libavformat/matroskadec.c:1417: error: undefined reference to 'inflate'
libavformat/matroskadec.c:1420: error: undefined reference to 'inflateEnd'
libavformat/mov.c:5125: error: undefined reference to 'uncompress'
libavformat/rtmpproto.c:1077: error: undefined reference to 'inflateInit_'
libavformat/rtmpproto.c:1087: error: undefined reference to 'inflate'
libavformat/swfdec.c:364: error: undefined reference to 'uncompress'
libavformat/swfdec.c:153: error: undefined reference to 'inflateInit_'
libavformat/swfdec.c:121: error: undefined reference to 'inflate'
libavcodec/cscd.c:96: error: undefined reference to 'uncompress'
libavcodec/flashsv.c:126: error: undefined reference to 'inflateInit_'
libavcodec/flashsv.c:259: error: undefined reference to 'deflateInit_'
libavcodec/flashsv.c:261: error: undefined reference to 'deflateBound'
libavcodec/flashsv.c:262: error: undefined reference to 'deflateEnd'
libavcodec/flashsv.c:191: error: undefined reference to 'inflateReset'
libavcodec/flashsv.c:210: error: undefined reference to 'inflateSync'
libavcodec/flashsv.c:160: error: undefined reference to 'deflateInit_'
libavcodec/flashsv.c:166: error: undefined reference to 'deflate'
libavcodec/flashsv.c:167: error: undefined reference to 'deflateEnd'
libavcodec/flashsv.c:169: error: undefined reference to 'inflateReset'
libavcodec/lcldec.c:134: error: undefined reference to 'inflateReset'
libavcodec/mscc.c:168: error: undefined reference to 'inflateReset'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
找不到的这些函数名:uncompress、inflateEnd 等都是z库中的函数。
因为 ffmpeg 依赖了z库。编译ffmpeg的时候如果仔细看编译时输出的日志,就可以看到External libraries:
zlib。
[root@iZky8l27ed9oe3Z ffmpeg-4.1.3]# ./build.sh
install prefix ./android/armeabi-v7a2
source path .
C compiler /root/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
C library bionic
host C compiler gcc
host C library glibc
ARCH arm (armv7-a)
big-endian no
runtime cpu detection yes
ARMv5TE enabled yes
ARMv6 enabled yes
ARMv6T2 enabled yes
VFP enabled yes
NEON enabled yes
THUMB enabled yes
debug symbols yes
strip symbols yes
optimize for size yes
optimizations yes
static yes
shared no
postprocessing support no
network support yes
threading support pthreads
safe bitstream reader yes
texi2html enabled no
perl enabled yes
pod2man enabled yes
makeinfo enabled no
makeinfo supports HTML noExternal libraries:
zlib
z库在NDK目录中:ndk路径\platforms\android-xx\arch-arm\usr\lib\libz.so
解决方案:添加z库的依赖。
target_link_libraries(native-lib
# -Wl,--start-group
# avcodec avfilter avformat avutil swresample swscale
# -Wl,--end-groupavfilter avformat avcodec avutil swresample swscalelogz
)
Fatal signal 11 (SIGSEGV), code 1, fault addr 0x65736164 in tid 21246 (.netease.player)
...
backtrace:#00 pc 65736164 <unknown>#01 pc 000ae7d1 /data/app/com.netease.player-1/lib/arm/libnative-lib.so (_ZN7_JNIEnv12NewGlobalRefEP8_jobject+36)#02 pc 000ae777 /data/app/com.netease.player-1/lib/arm/libnative-lib.so (_ZN14JavaCallHelperC2EP7_JavaVMP7_JNIEnvP8_jobject+46)#03 pc 000aec35 /data/app/com.netease.player-1/lib/arm/libnative-lib.so (Java_com_netease_player_NEPlayer_native_1prepare+76)#04 pc 001327eb /data/dalvik-cache/arm/data@app@com.netease.player-1@base.apk@classes.dex
3. JNIEnv跨线程使用问题
Fatal signal 11 (SIGSEGV), code 1, fault addr 0x98 in tid 6944 (.netease.player)
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: Honor/SCL-AL00/hnSCL-Q:5.1.1/HonorSCL-AL00/C00B261:user/release-keys
Revision: 0
ABI: arm
pid: 6240, tid: 6944, name: .netease.player >>> com.netease.player <<<
signal 11 (SIGSEGV), code 0 (SI_USER), fault addr 0x98 r0 00000000 r1 a0131dd0 r2 fffffa94 r3 00000007 r4 b6e08de4 r5 b5259000 r6 00000001 r7 fffffa98 r8 b52454d0 r9 b5256c88 sl 00000000 fp a0131c6c ip b5256ca0 sp a0131958 lr b5016017 pc b5015ad8 cpsr 800f0030 backtrace: #00 pc 000afad8 /system/lib/libart.so (_ZN3artL8JniAbortEPKcS1_+47) #01 pc 000b042f /system/lib/libart.so (_ZN3art9JniAbortFEPKcS1_z+58) #02 pc 000b312f /system/lib/libart.so (_ZN3art11ScopedCheckC2EP7_JNIEnviPKc+334) #03 pc 000ba801 /system/lib/libart.so (_ZN3art8CheckJNI15CallVoidMethodVEP7_JNIEnvP8_jobjectP10_jmethodIDSt9__va_list+32) #04 pc 000ae943 /data/app/com.netease.player-1/lib/arm/libnative-lib.so (_ZN7_JNIEnv14CallVoidMethodEP8_jobjectP10_jmethodIDz+82) #05 pc 000ae8e9 /data/app/com.netease.player-1/lib/arm/libnative-lib.so (_ZN14JavaCallHelper7onErrorEi+46) #06 pc 000aea33 /data/app/com.netease.player-1/lib/arm/libnative-lib.so (_ZN8NEFFmpeg8_prepareEv+174) #07 pc 000ae97b /data/app/com.netease.player-1/lib/arm/libnative-lib.so (_Z12task_preparePv+18) #08 pc 00013243 /system/lib/libc.so (_ZL15__pthread_startPv+30) #09 pc 0001125b /system/lib/libc.so (__start_thread+6)
解决方案:使用 JavaVM 的 AttachCurrentThread函数保证取得当前线程的JNIEnv。
JNIEnv *env;
javaVM->AttachCurrentThread(&env, NULL);
env->CallVoidMethod(instance, jmid_error, errorCode);
javaVM->DetachCurrentThread();
ffmpeg项目编译出错问题解决方案.相关推荐
- .NET项目报受源代码管理,向源代码管理注册此项目时出错的解决方案
拿到了别人写的一个项目使用VS打开时报错:受源代码管理,向源代码管理注册此项目时出错.导致项目在VS中无法加载,解决这个错误只需要找到该项目的csproj文件并打开进行一些修改即可. 具体方法: 找到 ...
- PhoneGap在Microsoft Visual Studio Express For Windows Phone上编译出错的解决方案
1.错误现象: 为何我用 这个phonegap 出错呢? 环境: visual studio 2010 express for windwos phone, sdk 7.1 phonegap 1.3 ...
- ffmpeg本地编译没有ffplay解决方案
在本地编译ffmpeg的时候编译没有ffplay,是因为缺少sdl库 只需要安装对应的库就行了 两个库之间差别还是很大的,至于怎样选择就看个人需要了,最好是两个都安装让编译的时候脚本自动判断选择吧 s ...
- Netgen编译出错的解决方案
1.fatal error C1083: 无法打开包括文件:"pthread.h": No such file or directory c/c++ general 附加包含路径添 ...
- vue项目编译出错eslint
1.如果安装了 eslint :它的语法很严格,当多打空格啥的都会报错, 如: Expected space or tab after '//' in comment 故:关闭 方式如下 修改buil ...
- Android项目出现main.xml编译出错和 出现main.out.xml无法编译的解决办法
由于Eclipse的原因 当run时处于xml文件的情况下 会出现这个问题 解决办法是: 1首先把自动生成的空文件main.out.xml删除 然后项目会出错 这时候选择Project--Clean ...
- Visual Studio 2005 提示“试图运行项目时出错:无法启动调试。绑定句柄无效”~[解决方案]...
如果VS提示"试图运行项目时出错:无法启动调试.绑定句柄无效"时, 解决方案有两种: 一.将项目属性里调试 --〉取消 启用 Visual Studio 宿主进程 二.将Termi ...
- 使用Cmake生成跨平台项目编译解决方案
项目最近有需求在windows下面运行,我花了几周时间将linux的服务器移植到windows下面,目前已经能够正常运行服务器,目前又有了新需求,两边的代码结构和组织是分开的,因此为了两边能够同步维护 ...
- go项目编译运行期间遇到的部分问题与解决方案【图文式小白教程】
go项目编译运行期间遇到的部分问题与解决方案[图文式小白教程] 文章目录 go: github.com/axgle/mahonia@v0.0.0-20180208002826-3358181d7394 ...
最新文章
- 关于timewait状态
- 使用clear fix清除浮动
- ImageLazyLoad-图片随着滚动而进行加载
- 数字信号处理学习笔记(二)|快速傅里叶变换
- XML Tree(树形结构)
- 腾讯 开源软件列表-开源中国社区
- 常用公有云接入——亚马逊
- python语言的注释语句引导符_Python 为什么用 # 号作注释符?
- 微型计算机在工作过程中突然遇到电源中断,微型计算机在工作过程中突然遇到电源中断,则计算机 中的信息将全部丢失,再次接通电源后也不能恢复数据。...
- 对象流java_Java中的对象流总结(必看篇)
- 大O,您如何计算/近似?
- 税控服务器组件接口v2.1.1.1,税控开票服务器组件接口规范标准版V1.9(2016.04.04).pdf...
- HTML 禁用Select下拉框的上下左右键盘按键默认事件
- 云主机 环境搭配 交接文档
- 100大产业链全景图(2020版)及智能制造50大产业链
- 有监督学习(supervised learning))与无监督学习(unsupervised learning)之间有何区别?
- java同步锁有哪几种_Java实现锁的几种方式
- 用大白话聊聊JavaSE -- 自定义注解入门
- java base64转图片
- shell小知识总结