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

Bash 5.0.17执行FFmpeg 6.1 configure脚本时引号丢失报错

解决Bash 5.0.17下FFmpeg configure调用pkg-config的引号丢失问题

问题本质

你碰到的是Bash 5.0.x版本的已知引号处理bug,并非该版本完全无法适配源码构建。这个bug会在特定参数传递场景下(比如configure脚本通过函数传递带空格的带引号参数时),错误移除引号,导致pkg-config收到拆分后的三个独立参数:libopenjp2、>=、2.1.0,而非预期的单个参数libopenjp2 >= 2.1.0,最终触发检测失败。

可行解决方案

1. 临时切换高版本Bash

这是最直接的解决方式:

  • 从源码编译安装Bash 5.1+版本(比如你测试过的5.1.16),安装后通过bash --version确认版本,再重新运行FFmpeg的configure脚本:
    ./configure [你的编译参数]
    
  • 若系统有现成的高版本Bash包(比如第三方PPA源),直接安装后切换使用即可。

2. 修改FFmpeg的configure脚本

既然已经定位到check_pkg_config函数的问题,可修改参数传递逻辑强制保留引号:

  • 找到configure脚本中check_pkg_config的定义部分,将调用pkg-config的行,给带版本的参数额外添加引号包裹。比如把:
    pkg-config --exists $2
    
    修改为:
    pkg-config --exists "$2"
    
    这样即使Bash错误处理外层引号,内层引号也能保证参数被正确传递。

3. 绕过pkg-config手动指定库路径

如果不想改动Bash或configure脚本,可直接在configure时跳过pkg-config检测,手动指定openjpeg的头文件和库路径:

./configure --enable-libopenjpeg \
  --extra-cflags="-I/usr/include/openjpeg-2.3" \
  --extra-ldflags="-lopenjp2"

注意替换成你系统中实际的头文件路径和库名。

关于Bash 5.0.17的兼容性

Bash 5.0.17确实存在部分参数解析bug,但并非完全无法适配多数源码构建——大部分configure脚本不会触发这个特定场景。不过如果经常编译源码,升级到Bash 5.1+版本能彻底避免这类问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 01:17:44