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



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

./configure

./make

ffmpeg hello world program (myffmpeg.c(:

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

但它显示

CLANG:警告:在C++模式下将"C"输入视为"C++",此行为已弃用

建筑x86_64的未定义符号:

"av_register_all((",引用自:

_main in myffmpeg-61ec1b.o

LD:找不到建筑x86_64符号

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

当我尝试链接allformat.o文件时,该文件具有av_register_all功能。我得到了:

CLANG:警告:在C++模式下将"C"输入视为"C++",此行为已弃用 建筑的未定义符号x86_64: "_av_register_input_format",引用自: _register_all in allformat.o "_av_register_output_format",引用自: _register_all in allformat.o "_avcodec_register_all",引用自: _register_all in allformat.o "_ff_a64_muxer",引用自: _register_all all format.o

"_ff_yuv4mpegpipe_muxer",引用自: _register_all in allformat.o LD:在建筑x86_64中找不到符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用(

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

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

g++ myffmpeg.c

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

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

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

我想我可以回答自己。

g++ -o main.o main.c `pkg-config --cflags --libs libavformat`

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

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

最新更新