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
这样即使Bash错误处理外层引号,内层引号也能保证参数被正确传递。pkg-config --exists "$2"
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
相关产品推荐
相关产品推荐

