Xcode编译报错:Library not found for -lavutil.57.58.100 求助
解决Xcode中FFmpeg链接错误:Library not found for -lavutil.57.58.100
错误核心原因
你添加的库文件是libavutil.57.28.100.dylib,但链接器尝试查找的是libavutil.57.58.100,版本号完全不匹配,这是导致报错的直接原因。
可能的深层诱因及对应解决方案
1. 头文件与库版本不匹配
- 问题:项目中引入的FFmpeg头文件(如
avutil.h)对应的是57.58.100版本,但你链接的是57.28.100版本的库,链接器会根据头文件中的版本宏定义去查找对应版本的库。 - 解决:
- 打开项目中的
avutil.h,查找以下宏定义:
如果确实是57.58.100,你需要:#define AVUTIL_VERSION_MAJOR 57 #define AVUTIL_VERSION_MINOR 58 #define AVUTIL_VERSION_MICRO 100- 要么安装对应版本的FFmpeg库(通过Homebrew安装匹配版本,或从FFmpeg官网下载对应版本编译);
- 要么替换项目中的FFmpeg头文件为57.28.100版本的对应文件。
- 打开项目中的
2. Homebrew多版本FFmpeg混淆
- 问题:你的系统中可能安装了多个版本的FFmpeg,项目间接依赖了高版本的libavutil,导致链接器错误地查找57.58.100版本。
- 解决:
- 用以下命令查看已安装的FFmpeg版本:
brew info ffmpeg - 如果存在多个版本,切换到你需要的5.1-with-options_2版本:
brew switch ffmpeg 5.1-with-options_2 - 若该版本不存在,重新安装指定版本的FFmpeg(如果Homebrew有该版本的Formula)。
- 用以下命令查看已安装的FFmpeg版本:
3. Xcode链接器参数手动指定错误
- 问题:你可能在Xcode的
Build Settings -> Other Linker Flags中手动添加了-lavutil.57.58.100,导致链接器忽略你在General中添加的库,直接查找指定版本。 - 解决:
- 打开Xcode项目的Build Settings,搜索
Other Linker Flags; - 删除其中的
-lavutil.57.58.100,替换为-lavutil(让链接器自动匹配你添加的库版本),或者明确写-lavutil.57.28.100。
- 打开Xcode项目的Build Settings,搜索
4. 架构兼容补充(针对你之前的推测)
虽然当前错误不是架构问题,但如果你的项目需要编译为universal(x64+arm64)二进制:
- 你当前的库仅为arm64架构,无法满足universal编译需求;
- 解决:重新编译FFmpeg为universal架构,或使用Homebrew编译时添加参数:
brew install ffmpeg --build-from-source --universal
后续验证步骤
- 确认库路径配置正确:检查Xcode的
Build Settings -> Library Search Paths是否包含/opt/homebrew/Cellar/ffmpeg/5.1-with-options_2/lib,且路径无拼写错误; - 检查库依赖:用以下命令验证libavutil的依赖是否完整(当前错误不涉及依赖,但后续运行时可能需要):
otool -L /opt/homebrew/Cellar/ffmpeg/5.1-with-options_2/lib/libavutil.57.28.100.dylib
内容的提问来源于stack exchange,提问作者user1418067
相关产品推荐
相关产品推荐

