自己的C ++项目

时间:2017-08-01 07:37:54

标签: makefile ffmpeg

我想使用FFMPEG创建自己的项目来构建播放器,但是创建一个包含ffmpeg库的新文件似乎并不容易。我已配置ffmpeg并进行构建。

./configure

./make

ffmpeg hello world程序(myffmpeg.c):

#include <libavformat/avformat.h>
int main(int argc, char *argv[]) {
  av_register_all();
  return 0;
}

但它显示

  clang:警告:对待&#39; c&#39;输入为&#39; c ++&#39;在C ++模式下,不推荐使用此行为

     

架构x86_64的未定义符号:

     

&#34; av_register_all()&#34;,引自:

     

_main in myffmpeg-61ec1b.o

     

ld:找不到架构x86_64的符号

     

clang:错误:链接器命令失败,退出代码为1(使用-v查看调用

当我尝试链接allformats.o文件时,其中包含av_register_all函数。我得到了:

  clang:警告:对待&#39; c&#39;输入为&#39; c ++&#39;在C ++模式下,不推荐使用此行为   架构x86_64的未定义符号:     &#34; _av_register_input_format&#34;,引自:         allformats.o中的_register_all     &#34; _av_register_output_format&#34;,引自:         allformats.o中的_register_all     &#34; _avcodec_register_all&#34;,引自:         allformats.o中的_register_all     &#34; _ff_a64_muxer&#34;,引自:         allformats.o中的_register_all

     

...

     

&#34; _ff_yuv4mpegpipe_muxer&#34;,引自:         allformats.o中的_register_all   ld:找不到架构x86_64的符号   clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

应该是我糟糕的Makefile知识,谁能给我一些关于如何调用ffmpeg库函数的提示?甚至如何修改Makefile来构建我自己的程序?谢谢!

*更新: 它可能是我的编译命令问题,它是编译的方式吗?

g++ myffmpeg.c

2 个答案:

答案 0 :(得分:4)

也许问题是c ++正在装饰功能。因此,使用C编译器和C ++编译的相同函数看起来与链接器不同。试试这个:

extern "C"
{
#include <libavformat/avformat.h>
}

此代码表示您告诉编译器不要修饰该文件中的函数。

答案 1 :(得分:1)

我想我可以自己回答。

let rotated1 = computeS (rot180 v) :: Array F DIM3 Word8
    rotated2 = computeS (rot180 rotated1) :: Array F DIM3 Word8

我现在不知道原因,它来自https://soledadpenades.com/2009/11/24/linking-with-ffmpegs-libav/

我们仍然需要外部,请参阅下面的答案。