# ffmpeg_build **Repository Path**: louisZzz/ffmpeg_build ## Basic Information - **Project Name**: ffmpeg_build - **Description**: 在MacOS上编译FFMPEG - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-12-12 - **Last Updated**: 2022-02-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 前提 1. 系统OSX 2. ffmpeg版本号n4.4 ## 静态库和动态库CMakeList文件 #本文件是最终版本 cmake_minimum_required(VERSION 3.10) find_library(log-lib log) add_library(avutil STATIC IMPORTED) set_target_properties(avutil PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/src/main/cpp/libs/${ANDROID_ABI}/libavutil.a) # add_library(avcodec STATIC IMPORTED) set_target_properties(avcodec PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/src/main/cpp/libs/${ANDROID_ABI}/libavcodec.a) # # add_library(avformat STATIC IMPORTED) set_target_properties(avformat PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/src/main/cpp/libs/${ANDROID_ABI}/libavformat.a) include_directories(src/main/cpp src/main/cpp/libs/${CMAKE_ANDROID_ARCH_ABI}/include/) add_library(ffmpeg_jni SHARED src/main/cpp/ffmpeg_jni.cpp) #target_link_libraries(ffmpeg_jni ${log-lib} avcodec avformat avutil swresample swscale ) target_link_libraries(ffmpeg_jni ${log-lib} avformat avcodec avutil m z ) ### 1. 静态库报错 src/libavcodec/cscd.c:96: error: undefined reference to 'uncompress' src/libavcodec/dxa.c:250: error: undefined reference to 'uncompress' src/libavcodec/exr.c:203: error: undefined reference to 'uncompress' src/libavcodec/exr.c:697: error: undefined reference to 'uncompress' src/libavcodec/exrenc.c:329: error: undefined reference to 'compress' src/libavcodec/flashsv.c:126: error: undefined reference to 'inflateInit_' src/libavcodec/flashsv.c:258: error: undefined reference to 'deflateInit_' src/libavcodec/flashsv.c:260: error: undefined reference to 'deflateBound' src/libavcodec/flashsv.c:261: error: undefined reference to 'deflateEnd' src/libavcodec/flashsv.c:190: error: undefined reference to 'inflateReset' src/libavcodec/flashsv.c:157: error: undefined reference to 'inflate' src/libavcodec/flashsv.c:159: error: undefined reference to 'deflateInit_' src/libavcodec/flashsv.c:165: error: undefined reference to 'deflate' src/libavcodec/flashsv.c:166: error: undefined reference to 'deflateEnd' src/libavcodec/flashsv.c:168: error: undefined reference to 'inflateReset' src/libavcodec/flashsv.c:177: error: undefined reference to 'inflate' src/libavcodec/flashsv.c:206: error: undefined reference to 'inflate' src/libavcodec/flashsv.c:209: error: undefined reference to 'inflateSync' src/libavcodec/flashsv.c:210: error: undefined reference to 'inflate' src/libavcodec/flashsv.c:107: error: undefined reference to 'inflateEnd' src/libavcodec/flashsv2enc.c:361: error: undefined reference to 'compress2' src/libavcodec/flashsv2enc.c:373: error: undefined reference to 'deflateInit_' src/libavcodec/flashsv2enc.c:382: error: undefined reference to 'deflate' src/libavcodec/flashsv2enc.c:391: error: undefined reference to 'deflate' src/libavcodec/flashsv2enc.c:392: error: undefined reference to 'deflateEnd' src/libavcodec/flashsvenc.c:174: error: undefined reference to 'compress2' src/libavcodec/flashsvenc.c:174: error: undefined reference to 'compress2' src/libavcodec/flashsvenc.c:174: error: undefined reference to 'compress2' src/libavcodec/lcldec.c:615: error: undefined reference to 'inflateInit_' src/libavcodec/lcldec.c:134: error: undefined reference to 'inflateReset' src/libavcodec/lcldec.c:134: error: undefined reference to 'inflateReset' src/libavcodec/lcldec.c:634: error: undefined reference to 'inflateEnd' src/libavcodec/lclenc.c:151: error: undefined reference to 'deflateInit_' src/libavcodec/lclenc.c:71: error: undefined reference to 'deflateBound' src/libavcodec/lclenc.c:81: error: undefined reference to 'deflateReset' src/libavcodec/lclenc.c:92: error: undefined reference to 'deflate' src/libavcodec/lclenc.c:165: error: undefined reference to 'deflateEnd' src/libavcodec/lscrdec.c:141: error: undefined reference to 'inflateInit_' src/libavcodec/lscrdec.c:216: error: undefined reference to 'inflateEnd' src/libavcodec/lscrdec.c:226: error: undefined reference to 'inflateEnd' src/libavcodec/mscc.c:232: error: undefined reference to 'inflateInit_' src/libavcodec/pngenc.c:1092: error: undefined reference to 'deflateInit2_' src/libavcodec/pngenc.c:532: error: undefined reference to 'deflateBound' src/libavcodec/pngenc.c:862: error: undefined reference to 'deflateBound' src/libavcodec/pngenc.c:520: error: undefined reference to 'deflateReset' src/libavcodec/tiffenc.c:179: error: undefined reference to 'compress' src/libavcodec/zmbvenc.c:269: error: undefined reference to 'deflateReset' clang++: error: linker command failed with exit code 1 (use -v to see invocation) ninja: build stopped: subcommand failed. - 解决方案:增加libz.so,**动态库不需要** ### 2.静态库必须按照顺序进行导入 - 案例分析 : avcodec 模块 ( 音视频编解码 ) 需要依赖 avformat 模块 ( 音频封装格式 ) ; 因此 , 导入 FFMPEG 函数库时 , avcodec 模块 必须在 avformat 模块之后 ; #错误例子 target_link_libraries(ffmpeg_jni ${log-lib} avcodec avutil avformat ) - 推荐顺序 : ① avfilter , ② avformat , ③ avcodec , ④ avutil , ⑤ swresample , ⑥ swscale #静态库引入 avfilter avformat avcodec avutil swresample swscale