我已经下载并安装了 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/