美文网首页
ffmpeg在Android中的编译错误

ffmpeg在Android中的编译错误

作者: YocnZhao | 来源:发表于2021-08-15 15:05 被阅读0次
  1. ffmpeg库的引入顺序不能打乱,而且必须引入z库,否则会报错,我这边的报错信息如下:
...
[106/106] Linking CXX shared library /Users/yocn/AndroidMediaCodec/libNative/build/intermediates/cmake/debug/obj/arm64-v8a/libnative-lib.so
FAILED: /Users/yocn/AndroidMediaCodec/libNative/build/intermediates/cmake/debug/obj/arm64-v8a/libnative-lib.so 
: && /Users/yocn/Library/Android/sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ --target=aarch64-none-linux-android21 --gcc-toolchain=/Users/yocn/Library/Android/sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/darwin-x86_64 --sysroot=/Users/yocn/Library/Android/sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/darwin-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security  -std=c++11 -fexceptions -frtti -DGL_GLEXT_PROTOTYPES=1 -O0 -fno-limit-debug-info  -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libgcc_real.a -Wl,--exclude-libs,libatomic.a -Wl,--build-id -Wl,--fatal-warnings -Wl,--no-undefined -Qunused-arguments -shared -Wl,-soname,libnative-lib.so -o /Users/yocn/AndroidMediaCodec/libNative/build/intermediates/cmake/debug/obj/arm64-v8a/libnative-lib.so CMakeFiles/native-lib.dir/native-lib.cpp.o CMakeFiles/native-lib.dir/YUVTrans.cpp.o CMakeFiles/native-lib.dir/ffmpegTests.cpp.o  /Users/yocn/AndroidMediaCodec/libNative/src/main/jni/ffmpeg-build/arm64-v8a/lib/libavfilter.a /Users/yocn/AndroidMediaCodec/libNative/src/main/jni/ffmpeg-build/arm64-v8a/lib/libavformat.a /Users/yocn/AndroidMediaCodec/libNative/src/main/jni/ffmpeg-build/arm64-v8a/lib/libavcodec.a /Users/yocn/AndroidMediaCodec/libNative/src/main/jni/ffmpeg-build/arm64-v8a/lib/libavutil.a /Users/yocn/AndroidMediaCodec/libNative/src/main/jni/ffmpeg-build/arm64-v8a/lib/libswresample.a /Users/yocn/AndroidMediaCodec/libNative/src/main/jni/ffmpeg-build/arm64-v8a/lib/libswscale.a /Users/yocn/AndroidMediaCodec/libNative/src/main/jni/lame-build/arm64-v8a/libmp3lame.a /Users/yocn/AndroidMediaCodec/libNative/src/main/jni/x264/install/lib/libx264.a -llog -lGLESv2 libyuv/libyuv.a -latomic -lm && :
/Users/yocn/AndroidMediaCodec/libNative/src/main/jni/ffmpeg-build/arm64-v8a/lib/libavformat.a(id3v2.o): In function `id3v2_parse':
/Users/yocn/AndroidMediaCodec/libNative/src/main/jni/ffmpeg/libavformat/id3v2.c:1031: undefined reference to `uncompress'
...

在link ffmpeg的时候会报错误,添加z库之后正常。

find_library( z-lib z)
target_link_libraries(
                       native-lib
                       avfilter avformat avcodec  avutil swresample swscale
                       log 
                       z)
  1. 编译链接时找不到对应的函数
undefined reference to `av_register_all()'
undefined reference to `avformat_open_input(AVFormatContext**, char const*, AVInputFormat*, AVDictionary**)'
undefined reference to `avformat_find_stream_info(AVFormatContext*, AVDictionary**)'
undefined reference to `avcodec_find_decoder(AVCodecID)'
undefined reference to `avcodec_open2(AVCodecContext*, AVCodec const*, AVDictionary**)'
undefined reference to `avcodec_alloc_frame()'
undefined reference to `avcodec_alloc_frame()'

解决方法:
用extern "C"{}把头文件包含起来。

extern "C"
{
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
}
  1. 找不到ANativeWindow

c++后台若使用ANativeWindow_fromSurfacesurface转化为ANativeWindow
报错:

undefined reference to `ANativeWindow_fromSurface'

编译时需要加-landroid

target_link_libraries( # Specifies the target library.
        native-lib
        ...
        -landroid
        ...
        )

并且使用#include <android/native_window_jni.h>头。

  1. "undefined reference to XXX"

try:

extern "C" {
...
}

相关文章

网友评论

      本文标题:ffmpeg在Android中的编译错误

      本文链接:https://www.haomeiwen.com/subject/pusubltx.html