当前位置:  技术问答>linux和unix

下载了一个用ffmpeg的libavcodec和libavformat编写的播放器程序,编译总失败???

    来源: 互联网  发布时间:2017-02-14

    本文导语:  我在网上下载了一个用ffmpeg的libavcodec和libavformat编写的播放器程序,编译总是失败,我用这个命令编译: gcc -o tutorial02 tutorial02.c -lavutil -lavformat -lavcodec -lz -lm `sdl-config --cflags --libs` 错误如下: tutorial02.c: In...

我在网上下载了一个用ffmpeg的libavcodec和libavformat编写的播放器程序,编译总是失败,我用这个命令编译:

gcc -o tutorial02 tutorial02.c -lavutil -lavformat -lavcodec -lz -lm `sdl-config --cflags --libs`

错误如下:

tutorial02.c: In function ‘main’:

tutorial02.c:120: warning: ‘avcodec_decode_video’ is deprecated (declared at /usr/local/include/libavcodec/avcodec.h:3156)

/tmp/ccOdJKy3.o: In function `main':

tutorial02.c:(.text+0x382): undefined reference to `img_convert'

collect2: ld returned 1 exit status

为什么总是出现 undefined reference to `img_convert'呢?

大侠帮我看看啊,先谢谢了

源代码如下:
#include 
#include 

#include 
#include 

#ifdef __MINGW32__
#undef main /* Prevents SDL from overriding main() */
#endif

#include 

int main(int argc, char *argv[]) {
  AVFormatContext *pFormatCtx;
  int             i, videoStream;
  AVCodecContext  *pCodecCtx;
  AVCodec         *pCodec;
  AVFrame         *pFrame; 
  AVPacket        packet;
  int             frameFinished;
  float           aspect_ratio;

  SDL_Overlay     *bmp;
  SDL_Surface     *screen;
  SDL_Rect        rect;
  SDL_Event       event;

  if(argc streams[i]->codec->codec_type==CODEC_TYPE_VIDEO) {
      videoStream=i;
      break;
    }
  if(videoStream==-1)
    return -1; // Didn't find a video stream
  
  // Get a pointer to the codec context for the video stream
  pCodecCtx=pFormatCtx->streams[videoStream]->codec;
  
  // Find the decoder for the video stream
  pCodec=avcodec_find_decoder(pCodecCtx->codec_id);
  if(pCodec==NULL) {
    fprintf(stderr, "Unsupported codec!n");
    return -1; // Codec not found
  }
  
  // Open codec
  if(avcodec_open(pCodecCtx, pCodec)width, pCodecCtx->height, 0, 0);
#else
        screen = SDL_SetVideoMode(pCodecCtx->width, pCodecCtx->height, 24, 0);
#endif
  if(!screen) {
    fprintf(stderr, "SDL: could not set video mode - exitingn");
    exit(1);
  }
  
  // Allocate a place to put our YUV image on that screen
  bmp = SDL_CreateYUVOverlay(pCodecCtx->width,
 pCodecCtx->height,
 SDL_YV12_OVERLAY,
 screen);


  // Read frames and save first five frames to disk
  i=0;
  while(av_read_frame(pFormatCtx, &packet)>=0) {
    // Is this a packet from the video stream?
    if(packet.stream_index==videoStream) {
      // Decode video frame
      avcodec_decode_video(pCodecCtx, pFrame, &frameFinished, 
   packet.data, packet.size);
      
      // Did we get a video frame?
      if(frameFinished) {
SDL_LockYUVOverlay(bmp);

AVPicture pict;
pict.data[0] = bmp->pixels[0];
pict.data[1] = bmp->pixels[2];
pict.data[2] = bmp->pixels[1];

pict.linesize[0] = bmp->pitches[0];
pict.linesize[1] = bmp->pitches[2];
pict.linesize[2] = bmp->pitches[1];

// Convert the image into YUV format that SDL uses
img_convert(&pict, PIX_FMT_YUV420P,
                    (AVPicture *)pFrame, pCodecCtx->pix_fmt, 
    pCodecCtx->width, pCodecCtx->height);

SDL_UnlockYUVOverlay(bmp);

rect.x = 0;
rect.y = 0;
rect.w = pCodecCtx->width;
rect.h = pCodecCtx->height;
SDL_DisplayYUVOverlay(bmp, &rect);
      
      }
    }
    
    // Free the packet that was allocated by av_read_frame
    av_free_packet(&packet);
    SDL_PollEvent(&event);
    switch(event.type) {
    case SDL_QUIT:
      SDL_Quit();
      exit(0);
      break;
    default:
      break;
    }

  }
  
  // Free the YUV frame
  av_free(pFrame);
  
  // Close the codec
  avcodec_close(pCodecCtx);
  
  // Close the video file
  av_close_input_file(pFormatCtx);
  
  return 0;
}


|


看看函数库的路径对不对,另外用 ldconfig -v 看看能否找到你需要的函数库

|
另外也可以用 gcc 来看看搜索路径里面有没有包括需要的函数库...

[root@test0 linux-2.6.29]# gcc -print-search-dirs
install: /usr/lib/gcc/i386-redhat-linux/4.3.2/
programs: =/usr/libexec/gcc/i386-redhat-linux/4.3.2/:/usr/libexec/gcc/i386-redhat-linux/4.3.2/:/usr/libexec/gcc/i386-redhat-linux/:/usr/lib/gcc/i386-redhat-linux/4.3.2/:/usr/lib/gcc/i386-redhat-linux/:/usr/libexec/gcc/i386-redhat-linux/4.3.2/:/usr/libexec/gcc/i386-redhat-linux/:/usr/lib/gcc/i386-redhat-linux/4.3.2/:/usr/lib/gcc/i386-redhat-linux/:/usr/lib/gcc/i386-redhat-linux/4.3.2/../../../../i386-redhat-linux/bin/i386-redhat-linux/4.3.2/:/usr/lib/gcc/i386-redhat-linux/4.3.2/../../../../i386-redhat-linux/bin/
libraries: =/usr/lib/gcc/i386-redhat-linux/4.3.2/:/usr/lib/gcc/i386-redhat-linux/4.3.2/:/usr/lib/gcc/i386-redhat-linux/4.3.2/../../../../i386-redhat-linux/lib/i386-redhat-linux/4.3.2/:/usr/lib/gcc/i386-redhat-linux/4.3.2/../../../../i386-redhat-linux/lib/:/usr/lib/gcc/i386-redhat-linux/4.3.2/../../../i386-redhat-linux/4.3.2/:/usr/lib/gcc/i386-redhat-linux/4.3.2/../../../:/lib/i386-redhat-linux/4.3.2/:/lib/:/usr/lib/i386-redhat-linux/4.3.2/:/usr/lib/

|
你好,我也正在学习ffmpeg,请问你的ffmpeg是怎么安装的啊,怎么我装上了编译tutorial01.c都要出错了,
命令gcc -o tutorial01 tutorial01.c -lavformat -lavcodec -lz,提示找不到lz,然后我把lz去掉编译,
居然提示ffmpeg-0.5里的很多错误,是怎么回事啊,希望得到你的指点,我的邮箱是munpk@126.com.谢谢

|
哎,你的代码太难看了,加上语法高亮显示...

|

gcc -o tutorial01 tutorial01.c -lavutil -lavformat -lavcodec -lz 
gcc -o tutorial02 tutorial02.c -lavutil -lavformat -lavcodec -lz -lm `sdl-config --cflags --libs`


两个的编译参数都不一样,为什么不换成一样的?

|
-Ldir
           Add directory dir to the list of directories to be searched for -l.




-L    添加链接库的搜索路径 

|

# gcc ‘sdl-config --cflags' -o tutorial02 tutorial02.c -lavutil -lavformat -lavcodec -lz -lm `sdl-config --libs`


行不?

    
 
 

您可能感兴趣的文章:

  • CentOS 6内核升级:下载编译启用新内核版本详细过程
  • 请问,哪里有Linux源代码下载?哪里有GNC C编译器下载?
  • 下载As86的一个压缩包,解开后没有rpm看样子的自己编译,请问如何编译。
  • 哪有cc编译器下载?
  • 哪有java的编译工具下载?
  • 什么是JAVAC编译器,哪里可以下载
  • !请问,新下载的驱动程序该如何编译进内核呢?
  • 刚下载一个内核源代码,怎样将它编译出来,然后安装运行呢?
  • 请问哪有Solaris下的GCC编译器下载??
  • sco下常用的c++编译器有什么?在哪里下载?谢谢
  • 求系统安装盘下载地址,有C、JAVA编译器、文本模式即可
  • 要哪里下载gvim编译器,要怎么用呢,有中文版的吗
  • 急:在哪儿可以下载java的反编译器jad.exe?????
  • 求gcc编译器下载???
  • 在redhat开发驱动时,需要下载一个linux源码,编译,替掉原有的内核吗?
  • 请教,刚下载了一个U_boot 1.2.0源码,能直接编译?
  • 怎样把JAVA编译成可执行程序,用VISUAL AGE或那里有下载的工具
  • 请问 下载了tfn2k源码 如何编译啊
  • 下载了飞信1.3源码,如何编译安装
  • 请问哪位能推荐几种好的反编译软件,在哪里可以下载
  • 帮个忙啊:哪有java编译器下载啊?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Centos6下安装Shell下文件上传下载rz,sz命令
  • WINDOWS下可以使用flashget来下载软件,那在linux下用什么工具软件来下载程序呢?哪里有linux平台下的下载工具可以下载?谢谢!
  • mongodb 下载官网地址
  • 请问高手,有没有办法可以控制文件的下载?下载文件,一般通过地址链直接链接过去就可以下载,但有些文件是要某种条件下才可以让客户下载,如
  • Hypertable 0.9.7.10 各种版本下载地址(最新版)
  • 哪有红旗Linux数据库服务器3.0版下载?红旗的网站只有桌面版下载,没有服务器版下载
  • windows下tinyxml.dll下载安装使用(c++解析XML库)
  • Linux不是免费的嘛,怎么在红旗的网站只有桌面版下载?没有server版下载?哪有红旗Linux数据库服务器3.0版下载?
  • Ubuntu 12.04长期支持版和最新版Ubuntu 13.10下载
  • FreeBSD安装盘镜像BT下载比直接下载还慢?
  • tcmalloc内存泄露优化c++开源库下载,安装及使用介绍
  • 那里有FREEBSD下载,需要下载那些文件?
  • Oracle 12c发布简单介绍及官方下载地址
  • jsp做下载文件,(如rar文件)为什么下载后,无法打开?
  • win7/Windows7系统下载地址搜集整理
  • 听说在solaris上运行java飞快,solaris有多大,如果不大,我想下载,哪有下载?
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • 那里有IBM的WEBSPHERE下载,能告诉我下载的网址吗?
  • PHP 5.4.19 和 PHP 5.5.3 发布及下载地址
  • 那有unix下的中文平台(东方龙马或赛博)下载?下载完毕,立即给分
  • oracle 11g最新版官方下载地址
  • 哪儿有bes5下载,在线等待。下载成功再送299分!!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3