使用ffmpeg库编译错误

时间:2012-10-15 21:00:34

标签: gcc architecture compilation ffmpeg

我已经下载并安装了ffmpeg库。我想用它来阅读不同视频的单独帧并操纵它们。为此,我试着从这里开始学习一些教程:http://dranger.com/ffmpeg/tutorial01.html 但是我得到以下编译后无法编译我的cpp文件:

Undefined symbols for architecture x86_64:
  "av_register_all()", referenced from:
      _main in cc9zyUBe.o
      _main in ccRz35d4.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

当我安装ffmpeg库时,我在./configure步骤中使用了arch = x86_64选项。 我使用OS X Mountain Lion 10.8.2和gcc 4.2编译器。 有人知道这个错误的原因是什么? 提前谢谢。

更新: 我已经尝试了许多不同的安装选项,包括静态库,共享库,有/没有--arch = x86_64选项。也用自制软件安装,结果保持不变。图书馆无法识别。但是当我将它用作命令行工具时,ffmpeg二进制文件的效果非常好。

2 个答案:

答案 0 :(得分:9)

最后,我设法编译了使用ffmpeg库的程序。

由于某些原因,我仍然无法使用gcc编译器编译它,但我可以用g ++编译器来编译它。

安装静态库时,必须明确指定所有依赖项,并且这些库的链接顺序也很重要。所以这里是最终编译我的程序的编译代码:

g++ readVideo.cc -o readVideo $(pkg-config --libs --cflags libavformat)

pkg-config这是一个实用程序,它打印正确链接指定libavformat库所需的所有标志和库。

另外值得一提的是,源文件已从readVideo.C重命名为readVideo.cc,#include语句已使用extern "C"包含,如下所示:

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

这是必需的,因为ffmpeg是一个C项目,如果没有明确声明它是C库,程序将无法使用C ++编译器进行编译。

如果您不想打扰pkg-config以包含ffmpeg库的所有依赖项,则可以使用共享库而不是静态库来安装ffmpeg。然后它将通过更简单的调用编译:

g++ readVideo.cc -o readVideo -lavformat

要安装共享库,您需要在安装ffmpeg时将这两个选项添加到./configure程序:

--disable-static --enable-shared

希望它能帮到某个人......

答案 1 :(得分:0)

错误意味着您没有链接到ffmpeg库。仅仅包含头文件是不够的。您还需要链接到实际的库文件。在Windows上,他们有.lib扩展名,在Linux上通常是.a扩展名,不确定Mac。

相关问题