FFMPEG 库用于自己的 C++ 项目

Chi*_*han 2 ffmpeg makefile

我想使用 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;
}
Run Code Online (Sandbox Code Playgroud)

但它显示

clang:警告:在 C++ 模式下将“c”输入视为“c++”,此行为已弃用

体系结构 x86_64 的未定义符号:

“av_register_all()”,引用自:

_main 在 myffmpeg-61ec1b.o

ld:找不到架构 x86_64 的符号

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

当我尝试链接内部包含 av_register_all 函数的 allformats.o 文件时。我有:

clang:警告:在 C++ 模式下将“c”输入视为“c++”,此行为已弃用架构 x86_64 的未定义符号:“_av_register_input_format”,引用自:allformats.o 中的 _register_all “_av_register_output_format”,引用自:allformats 中的 _register_all .o "_avcodec_register_all",引用自:allformats.o 中的_register_all.o "_ff_a64_muxer",引用自:allformats.o 中的_register_all

...

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

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

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

g++ myffmpeg.c

小智 5

也许问题在于 c++ 正在装饰函数。所以用 C 编译器和 C++ 编译的相同函数看起来与链接器不同。尝试这个:

extern "C"
{
#include <libavformat/avformat.h>
}
Run Code Online (Sandbox Code Playgroud)

这段代码意味着您告诉编译器不要装饰该文件中的函数。