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

编译引用libavformat头文件的C++程序遇文件不存在错误求助

编译FFmpeg相关C++程序时头文件找不到的解决方案

问题详情

我编写了名为test.cpp的C++程序,代码如下:

#include <iostream>
#include <libavformat\avformat.h>
using namespace std;

int main() 
{
    cout << "Hello, World!";
    return 0;
}

使用命令编译:

g++ test.cpp -o test

出现编译错误:

test.cpp:2:10: fatal error: libavformat\avformat.h: No such file or directory
    2 | #include <libavformat\avformat.h>
      |          ^~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.

补充信息:

  • libavformat/avformat.h实际路径为/usr/include/x86_64-linux-gnu/libavformat/avformat.h
  • FFmpeg版本信息:
$ ffmpeg -version

ffmpeg version 4.4.2-0ubuntu0.22.04.1 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 11 (Ubuntu 11.2.0-19ubuntu1)
configuration: --prefix=/usr --extra-version=0ubuntu0.22.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
libavutil      56. 70.100 / 56. 70.100
libavcodec     58.134.100 / 58.134.100
libavformat    58. 76.100 / 58. 76.100
libavdevice    58. 13.100 / 58. 13.100
libavfilter     7.110.100 /  7.110.100
libswscale      5.  9.100 /  5.  9.100
libswresample   3.  9.100 /  3.  9.100
libpostproc    55.  9.100 / 55.  9.100

尝试以下命令仍未解决:

g++ `pkg-config --cflags libavformat` test.cpp  `pkg-config --libs libavformat` -o test

解决方案

1. 修正头文件路径分隔符

Linux系统下路径分隔符为正斜杠/,代码中误用了Windows的反斜杠\,将头文件包含语句修改为:

#include <libavformat/avformat.h>

2. 确保编译命令正确传递参数

如果使用pkg-config,建议用$()替代反引号(兼容性更好),执行以下编译命令:

g++ $(pkg-config --cflags libavformat) test.cpp $(pkg-config --libs libavformat) -o test

执行前可先单独运行pkg-config --cflags libavformat,确认输出包含-I/usr/include/x86_64-linux-gnu(指定头文件搜索路径)。

3. 手动指定路径(备选方案)

若pkg-config无法正常工作,可直接手动指定头文件和库的路径:

g++ -I/usr/include/x86_64-linux-gnu test.cpp -L/usr/lib/x86_64-linux-gnu -lavformat -o test
  • -I:指定头文件搜索目录
  • -L:指定库文件搜索目录
  • -lavformat:链接libavformat库

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 14:51:24