You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apple芯片MacOS上用CMake为Qt6程序打包FFmpeg遇问题

问题分析与解决方案

核心问题

  1. FFmpeg源码未完成构建:FetchContent仅负责拉取源码,FFmpeg需要通过自身configure+make流程生成构建产物,avconfig.h就是构建时自动生成的文件,不存在于原始源码目录。
  2. 头文件路径配置错误:仅添加libavutil等子目录,导致avutil.h中引用的<libavutil/avconfig.h>无法被编译器找到,需将FFmpeg根目录(或构建后的安装目录)加入包含路径。
  3. 链接配置错误:target_link_libraries不应链接头文件,需链接编译生成的FFmpeg库文件(.a或.dylib)。

具体解决步骤

1. 调整CMake配置,自动构建FFmpeg

替换原FetchContent相关代码,添加FFmpeg的编译流程:

FetchContent_Declare(
    ffmpeg
    GIT_REPOSITORY https://github.com/FFmpeg/FFmpeg.git
    GIT_TAG        n5.1.2
)

FetchContent_GetProperties(ffmpeg)
if(NOT ffmpeg_POPULATED)
    FetchContent_Populate(ffmpeg)
    
    # 针对Apple芯片MacOS配置FFmpeg,按需调整编译选项
    execute_process(
        COMMAND ./configure --prefix=${ffmpeg_BINARY_DIR} --enable-static --disable-shared --disable-programs --disable-doc --arch=arm64
        WORKING_DIRECTORY ${ffmpeg_SOURCE_DIR}
        RESULT_VARIABLE ffmpeg_config_result
    )
    if(NOT ffmpeg_config_result EQUAL 0)
        message(FATAL_ERROR "FFmpeg configure失败")
    endif()
    
    # 编译并安装FFmpeg到指定目录
    execute_process(
        COMMAND make -j${CMAKE_BUILD_PARALLEL_LEVEL} install
        WORKING_DIRECTORY ${ffmpeg_SOURCE_DIR}
        RESULT_VARIABLE ffmpeg_build_result
    )
    if(NOT ffmpeg_build_result EQUAL 0)
        message(FATAL_ERROR "FFmpeg编译失败")
    endif()
endif()

2. 修正头文件与库链接配置

替换原include_directories和target_link_libraries:

# 添加FFmpeg安装后的头文件目录
target_include_directories(taqtie
    PRIVATE
    ${ffmpeg_BINARY_DIR}/include
)

# 链接编译生成的FFmpeg静态库
target_link_libraries(taqtie
    PRIVATE
    ${ffmpeg_BINARY_DIR}/lib/libavutil.a
    ${ffmpeg_BINARY_DIR}/lib/libavcodec.a
    ${ffmpeg_BINARY_DIR}/lib/libavformat.a
    # 按需添加其他依赖库,如libavfilter、libswscale等
)

3. 调整源码中的头文件引用

保持extern "C"包裹逻辑,修改include路径(若已添加正确的包含目录,<avutil.h>也可正常使用,以下两种写法均可):

extern "C" {
#ifndef __STDC_CONSTANT_MACROS
#define __STDC_CONSTANT_MACROS
#endif
#include <libavutil/avutil.h>
}

补充说明

  • 若需要动态库,将configure参数中的--enable-static --disable-shared改为--enable-shared --disable-static,链接时对应使用.dylib文件。
  • 清理原CMake构建目录后重新运行配置,避免缓存残留问题。

内容的提问来源于stack exchange,提问作者AliOsm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 06:25:09