Ubuntu16.04平台调试FFmpeg时头文件找不到问题求助
解决Ubuntu16.04下编译FFmpeg代码找不到头文件的问题
这是编译FFmpeg代码时很常见的问题——代码里明明写了头文件引用,但编译器不知道去哪里找这些文件,也没关联对应的库文件。下面分两种最常见的场景给你解决办法:
场景1:通过系统包管理器安装FFmpeg开发库
如果你是用apt安装的FFmpeg组件,首先得确认装的是开发包(只装ffmpeg命令行工具是不够的,编译代码需要开发库支持):
sudo apt-get update sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev
安装完成后,别直接用gcc your_code.c编译,借助pkg-config自动获取编译参数才是省心的办法:
gcc your_test_code.c -o ffmpeg_test $(pkg-config --cflags --libs libavcodec libavformat libswscale)
其中--cflags会自动添加头文件的搜索路径,--libs会帮你链接需要的FFmpeg库,一次性解决头文件找不到和后续链接错误的问题。
场景2:手动编译源码安装的FFmpeg
如果是自己下载FFmpeg源码编译安装的(比如默认装到/usr/local,或者你指定了自定义目录),就得手动告诉编译器头文件和库的位置:
- 先定位头文件的位置,用这个命令查找:
find / -name avcodec.h 2>/dev/null
假设输出是/usr/local/include/libavcodec/avcodec.h,那头文件的根目录就是/usr/local/include,库文件一般在/usr/local/lib。
2. 编译时手动指定路径和链接库:
gcc your_test_code.c -o ffmpeg_test -I/usr/local/include -L/usr/local/lib -lavcodec -lavformat -lswscale
-I:指定头文件的搜索根目录-L:指定库文件的搜索目录-l:链接对应的FFmpeg库(比如-lavcodec对应libavcodec.so)
另外,运行编译后的程序如果提示找不到库,可以临时设置环境变量:
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH ./ffmpeg_test
想永久生效的话,把上面的export命令添加到~/.bashrc文件里,再执行source ~/.bashrc即可。
额外排查小技巧
- 代码里的
#include "libavcodec/avcodec.h"写法是对的,只要头文件根目录下存在libavcodec子目录就没问题,换成<libavcodec/avcodec.h>也可以,效果一致。 - 确认FFmpeg安装正常:用
ffmpeg -version验证,或者直接去安装目录查看头文件和库文件是否完整。
内容的提问来源于stack exchange,提问作者Colin0114
相关产品推荐
相关产品推荐

