我想使用 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/
我们仍然需要外部,请参阅下面的答案。