FFmpeg交叉編譯到JNI以及測試Demo可以參考以下網站:
https://www.itread01.com/content/1546866543.html
下面整理一下了 cross compiler FFmpeg 時遇到的問題。
-
在交叉編譯FFmpeg時,分別遇到以下三種錯誤:
ERROR: jni not foundlinux C compiler test faile
‘s_addr’ in something not a structure or unionr
最後解決方法,直接更換成FFmpeg 4.0.1版本並搭配NDK 版本 android-ndk-r14b。
這牽扯到一些新舊版SDK及FFmpeg版本問題,直接跟換版本最快。
- 當碰到以下錯誤時:
Makefile:2: ffbuild/config.mak: No such file or directory
Makefile:40: /tools/Makefile: No such file or directory
…
可以參考以下網址:https://www.laoyuyu.me/2019/05/23/android/clang_compile_ffmpeg/
解決辦法:(執行 ./configure --disable-x86asm 生成config.mak文件)
- 當遇到以下時:
libavdevice/fbdev_common.c:134:1: fatal error: opening dependency file libavdevice/fbdev_common.d: Permission denied compilation terminated.
ffbuild/common.mak:60: recipe for target ‘libavdevice/fbdev_common.o’ failed
make: *** [libavdevice/fbdev_common.o] Error 1
make: *** Waiting for unfinished jobs…
l ibavdevice/alldevices.c:70:1: fatal error: opening dependency file libavdevice/alldevices.d: Permission denied
解決辦法: sudo make -j4
- 當編譯FFmpeg JNI遇到以下問題時:
FFmpeg-n4.0.1\libavcodec/x86/mathops.h:118:12: error: invalid input constraint ‘ic’ in asm
: “ic” ((uint8_t)(-s))
^
FFmpeg-n4.0.1\libavcodec/x86/mathops.h:127:12: error: invalid input constraint ‘ic’ in asm
: “ic” ((uint8_t)(-s))
解決方式: 在linux上,重新交叉編譯,在build.sh內的
./configure
裡面加入 --disable-x86asm \ 及 --disable-inline-asm \
- 當編譯FFmpeg JNI遇到以下問題時:
.error: undefined reference to ‘postproc_version’
可參考:
http://www.matools.com/lang-cht/blog/190618650