FFMPEG未定义对`avdevice_register_all'的引用

时间:2014-04-04 16:47:43

标签: c++ ffmpeg

我正在尝试使用ffmpeg构建简单的程序

#include <stdio.h>
 #include <stdlib.h>
 #define __STDC_CONSTANT_MACROS
extern "C" {
 #include <libavcodec/avcodec.h>
 #include <libavformat/avformat.h>
 #include <libavformat/avio.h>
#include <libavdevice/avdevice.h>
#include <libavutil/time.h>
 }


#include <iostream> 


 int main( int argc, char* argv[] )
 {
   AVCodec *icodec;
  AVFormatContext *ifcx = NULL;
  AVInputFormat *ifmt;
  AVCodecContext *iccx;
   AVStream *ist;
   AVStream *ost;
   AVPacket pkt;
   int i_index;
  int64_t timenow, timestart;
   int got_key_frame = 0;

   AVFormatContext *ofcx;

   const char *sProg = argv[ 0 ];
   const char *sFileInput;
   const char *sFileOutput;
  int64_t bRunTime;

  bRunTime = atoi( argv[ 2 ] ) * 1000000;

   // Initialize library
   av_log_set_level( AV_LOG_DEBUG );
   av_register_all();
   avcodec_register_all(); 
   avformat_network_init();
   avdevice_register_all();

我得到了这些错误

g ++ -o rtsp3 -I / usr / include -I / usr / local / include rtsp3.cpp -lavformat -lavcodec -lavutil -lm -lz -lva -lpthread /tmp/ccAXDgvi.o:在函数main': rtsp3.cpp:(.text+0x115): undefined reference to avdevice_register_all&#39; /usr/local/lib/libavformat.a(matroskadec.o):在函数matroska_decode_buffer': /home/user/projects/ffmpeg-git/ffmpeg/libavformat/matroskadec.c:1242: undefined reference to BZ2_bzDecompressInit&#39; /home/user/projects/ffmpeg-git/ffmpeg/libavformat/matroskadec.c:1257:对BZ2_bzDecompress' /home/user/projects/ffmpeg-git/ffmpeg/libavformat/matroskadec.c:1250: undefined reference to未定义的引用BZ2_bzDecompressEnd&#39; /home/user/projects/ffmpeg-git/ffmpeg/libavformat/matroskadec.c:1262:未定义引用`BZ2_bzDecompressEnd&#39; collect2:错误:ld返回1退出状态

我有gf版本的ffmpeg并成功编译并进行安装。

4 个答案:

答案 0 :(得分:1)

试试这个,它对我有用:

gcc -o main.o main.c `pkg-config --cflags --libs libavformat libavutil`

答案 1 :(得分:0)

您需要与libavdevice链接,例如-lavdevice

另外,显然,libbz2,例如-lbz2

答案 2 :(得分:0)

我通过安装libbz2-dev

解决了这个问题

在Ubuntu上:sudo apt-get install libbz2-dev

答案 3 :(得分:0)

检查路径中是否添加了libav格式的目标文件。您已在makefile中正确添加了库管理程序,因此不应该出现问题。 如果您使用的是ubuntu,请检查是否已预设
/usr/lib/x86_64-linux-gnu/libavformat.so

如果没有,则需要安装libavformat-dev

您可以使用“sudo apt-get install libavformat-dev”

进行安装

我遇到了同样的问题,之后就解决了。