我想使用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;
}
但它显示
clang:警告:对待&#39; c&#39;输入为&#39; c ++&#39;在C ++模式下,不推荐使用此行为架构x86_64的未定义符号:
&#34; av_register_all()&#34;,引自:
_main in myffmpeg-61ec1b.o
ld:找不到架构x86_64的符号
clang:错误:链接器命令失败,退出代码为1(使用-v查看调用
当我尝试链接allformats.o文件时,其中包含av_register_all函数。我得到了:
clang:警告:对待&#39; c&#39;输入为&#39; c ++&#39;在C ++模式下,不推荐使用此行为 架构x86_64的未定义符号: &#34; _av_register_input_format&#34;,引自: allformats.o中的_register_all &#34; _av_register_output_format&#34;,引自: allformats.o中的_register_all &#34; _avcodec_register_all&#34;,引自: allformats.o中的_register_all &#34; _ff_a64_muxer&#34;,引自: allformats.o中的_register_all...
&#34; _ff_yuv4mpegpipe_muxer&#34;,引自: allformats.o中的_register_all ld:找不到架构x86_64的符号 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
应该是我糟糕的Makefile知识,谁能给我一些关于如何调用ffmpeg库函数的提示?甚至如何修改Makefile来构建我自己的程序?谢谢!
*更新: 它可能是我的编译命令问题,它是编译的方式吗?
g++ myffmpeg.c
答案 0 :(得分:4)
也许问题是c ++正在装饰功能。因此,使用C编译器和C ++编译的相同函数看起来与链接器不同。试试这个:
extern "C"
{
#include <libavformat/avformat.h>
}
此代码表示您告诉编译器不要修饰该文件中的函数。
答案 1 :(得分:1)
我想我可以自己回答。
let rotated1 = computeS (rot180 v) :: Array F DIM3 Word8
rotated2 = computeS (rot180 rotated1) :: Array F DIM3 Word8
我现在不知道原因,它来自https://soledadpenades.com/2009/11/24/linking-with-ffmpegs-libav/
我们仍然需要外部,请参阅下面的答案。