总是编译不过去,怎么知道下的代码里的依赖的库比如 ffmpeg 、qt这些具体是依赖哪个版本的

一句话结论
Olive master 分支目前(2025-10)官方 CI 与多篇实测都锁定在
  • Qt 5.15.x(5.15.2 最稳,6.x 仍可能踩坑)
  • FFmpeg 4.3.x – 5.0.x(4.3.1 / 4.4 / 5.0 均可,7.0 已确认不能用
  • OpenImageIO 2.1.12+
  • OpenColorIO 2.0+
只要把这 4 项版本对齐,90 % 的编译失败都能直接消失。下面给出“一眼就能看出来”的查找方法,免得以后再猜。

1. 官方 README → 先看“硬性”下限

仓库根目录 README.mddoc/build.md 里会写 minimum required 版本,例如
Qt 5.15+, FFmpeg 3.0+, OpenImageIO 2.1.12+, OpenColorIO 2.0+
这是“下限”,实际“上限”要看后面两条。

2. 官方 CI 脚本 → 看“真实”上限

GitHub Actions 文件 .github/workflows/ci.yml 里会把每天编译通过的版本写死:
yaml
复制
- name: Install Qt
  uses: jurplel/install-qt-action@v3
  with:
    version: '5.15.2'          # ← Qt 版本
    arch: 'win64_msvc2019_64'

- name: Install dependencies
  run: vcpkg install ffmpeg:4.4#12 ...   # ← FFmpeg 版本
 
CI 能绿的组合就是开发者当天保证能过的“官方推荐版本”,直接照抄即可。

3. vcpkg.json → 精确到“port 版本号”

Olive 已自带 vcpkg.json,里面要么
  1. 写了 "overrides" → 直接给出 ffmpeg 4.4#12 这类精确版本;
  2. 没写 "overrides" → 把 "builtin-baseline" 那行 commit-id 拿到
    https://github.com/microsoft/vcpkg/tree/<commit-id>

4. 社区踩坑汇总 → 快速验证

  • FFmpeg 7.0 删除 av_get_channel_layout_nb_channels编译即挂
     
  • FFmpeg 4.3.1 通过实测,4.4 / 5.0 也能过
  • Qt 6 目前仍需手动关一些 deprecated warning,5.15.2 最省心
     

5. 一条命令“锁定”正确依赖(Windows 例)

把下面 vcpkg.json 扔进 Olive 同级目录再 vcpkg install 就能一次性拉到“官方当天能过”的版本:
JSON
复制
{
  "dependencies": [
    {"name": "ffmpeg", "version>=": "4.4#12"},
    "opencolorio",
    "openimageio",
    "portaudio"
  ],
  "overrides": [
    {"name": "ffmpeg", "version": "4.4#12"}
  ],
  "builtin-baseline": "3426db0f17ef6df184fcdbfbe0f87cde2313b6ab1"
}
 
CMake 侧再加
cmake
复制
set(CMAKE_PREFIX_PATH "C:/Qt/5.15.2/msvc2019_64" ${CMAKE_PREFIX_PATH})
 
就能和 CI 用的一模一样。

6. 结论速查表(2025-10 有效)

表格
复制
依赖项推荐版本备注
Qt 5.15.2 6.x 需额外补丁
FFmpeg 4.3.1 – 5.0 7.0 API 已删函数,勿用
OpenImageIO ≥ 2.1.12 vcpkg 默认最新即可
OpenColorIO ≥ 2.0 vcpkg 默认最新即可
CMake ≥ 3.20 VS2022 自带已够
按上表锁定版本后,清空 CMake 缓存再编,基本可一次性通过。祝编译顺利!
posted @ 2025-11-02 15:35  cnchengv  阅读(10)  评论(0)    收藏  举报