gcc - 使用ffmpeg库编译报错

标签 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 二进制文件用作命令行工具时,它工作得很好。

最佳答案

最后,我成功地编译了我使用 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时将这2个选项添加到./configure程序中:

--disable-static --enable-shared

希望它能帮到一些人……

关于gcc - 使用ffmpeg库编译报错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12903910/

相关文章:

c# - 结合 ORM、工作单元和存储库模式的主从 View

c++ - 为什么带有 const 参数的函数声明允许调用带有非常量参数的函数?

compilation - nagfor 预处理器的用户定义错误

c++ - -Ofast 在使用 long double 时产生不正确的代码

c++ - 安装g++并编译问题

c++ - MFC - 并行记录和查看

c - GNU mingw 编译器错误 : sh: gcc: command not found

c++ - 系统头文件中的条件编译

c - GCC double 浮点运算的特殊优化选项

c - C 中的函数指针与结构不活动