7

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

编译并安装 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

我该如何解决这个问题?

4

5 回答 5

12

将包含放在外部“C”块中可能会起作用。

extern "C"{
    #include <libavcodec/avcodec.h>
    #include <libavformat/avformat.h>
    #include <libswscale/swscale.h>
}
于 2014-06-28T12:38:44.917 回答
3

如此处所述 ,库的顺序很重要,因此在您的情况下,希望以下内容可以工作:

gcc main.c -o main.o -lavformat -lavcodec -lavutil  -lz -lm -lpthread
于 2014-01-23T11:50:45.063 回答
3
gcc filename.c -o outputfilename -lavformat -lavcodec -lavutil  -lz -lm -lpthread -I'/usr/local/include' -lswresample

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

于 2016-06-08T10:39:46.990 回答
1

看看这个项目如何构建示例代码。

Makefile 很容易理解。

于 2012-09-20T12:15:39.590 回答
0

这对我有用:

gcc <your source code> -o main -lavformat -lavcodec -lavutil -lm -lpthread -I'/usr/local/include' -lswresample
于 2018-06-13T03:54:15.787 回答