在构建关于ffmpeg的演示时,会发生:对`av_register_all'的未定义引用

时间:2012-09-17 08:37:27

标签: ffmpeg

这个问题困扰了我好几天。

编译并安装ffmpeg之后,我尝试使用它构建一个演示,但它总是失败。

演示是:

#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"

int main(int argc,char *argv[]) {
    av_register_all();
    return 1;
}

使用gcc main.c -o main.o时,会出现错误:undefined reference to 'av_register_all'

使用:gcc main.c -o main.o -lm -ld -lz -lavcodec -lavformat -lavutil构建,发生另一个错误:/usr/bin/ld: cannot find -ld

我该如何解决这个问题?

5 个答案:

答案 0 :(得分:11)

包括在extern" C"阻止可能有效。

extern "C"{
    #include <libavcodec/avcodec.h>
    #include <libavformat/avformat.h>
    #include <libswscale/swscale.h>
}

答案 1 :(得分:2)

gcc filename.c -o outputfilename -lavformat -lavcodec -lavutil  -lz -lm -lpthread -I'/usr/local/include' -lswresample

上述命令将有助于正确编译。

答案 2 :(得分:1)

了解this project如何构建示例代码。

Makefile很容易理解。

答案 3 :(得分:1)

如上所述here 图书馆的秩序很重要 所以在你的情况下,以下希望应该有效:

gcc main.c -o main.o -lavformat -lavcodec -lavutil  -lz -lm -lpthread

答案 4 :(得分:0)

这对我有用:

gcc <your source code> -o main -lavformat -lavcodec -lavutil -lm -lpthread -I'/usr/local/include' -lswresample