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

Ubuntu 18.04下编译Win32版本VLC 3.0.2失败求助

解决Ubuntu 18.04交叉编译Win32版VLC 3.0.2时的FAAD库符号未定义问题

我之前在交叉编译VLC到Win32架构时也碰到过一模一样的_imp____acrt_iob_func符号未定义问题,本质是MinGW-w64工具链的C运行时(CRT)版本不匹配导致的:你当前使用的预编译libfaad.a是用依赖UCRT(通用C运行时)的新MinGW版本编译的,但你的交叉编译环境里的工具链还在依赖旧的msvcrt,所以链接时找不到这个UCRT专属符号。用旧版FAAD库规避的话,又会因为缺少VLC 3.0.2依赖的LATM相关API(从错误里的latmAudioMuxElement函数能看出来)导致后续编译失败,下面是完整的解决步骤:

1. 先更新MinGW-w64工具链(Ubuntu 18.04默认版本偏旧)

Ubuntu 18.04官方源里的MinGW-w64版本可能不支持UCRT,先添加工具链PPA更新到兼容版本:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get upgrade gcc-mingw-w64-i686 g++-mingw-w64-i686

验证更新后的版本:

i686-w64-mingw32-gcc --version

确保版本在8.0以上,这个版本开始支持UCRT。

2. 重新编译匹配CRT的FAAD2(及其他VLC依赖)

问题出在预编译的contrib库版本不匹配,所以需要重新编译所有Win32 contrib库,指定使用UCRT:

  • 先清理旧的contrib编译产物:
rm -rf contrib/i686-w64-mingw32
  • 进入contrib目录并初始化编译脚本:
cd contrib
./bootstrap
  • 运行Win32 contrib编译脚本,指定目标架构和UCRT:
../extras/package/win32/build-contrib.sh --host=i686-w64-mingw32 --with-win32-api=ucrt

这个过程会自动下载并编译所有VLC依赖(包括FAAD2),确保它们使用的CRT和你的工具链一致。

3. 重新运行configure脚本

现在用匹配的参数重新执行configure,确保和contrib的CRT设置一致:

../extras/package/win32/configure.sh --host=i686-w64-mingw32 --build=x86_64-pc-linux-gnu --with-win32-api=ucrt

这时候configure应该能顺利通过FAAD库的检查,不会再出现符号未定义的错误。

额外注意事项

  • 如果编译contrib时出现依赖下载失败,可以手动下载对应的源码包放到contrib的src目录下,脚本会自动识别并使用本地文件。
  • 全程确保你的Ubuntu系统有足够的磁盘空间(至少20GB),交叉编译VLC和依赖需要较多存储。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:38:35