2

我最近一直在尝试编译使用 FFmpeg 库的 C 代码;但是,由于我无法确定的原因,编译失败。

我一直在尝试编译的代码是 Doxygen 文档网站上 FFmpeg 上的 filtering_audio.c 文件(我将提供链接,因为代码太长,无法在此处引用): http: //ffmpeg.org/ doxygen/trunk/doc_2examples_2filtering_audio_8c-example.html

我使用 gcc 编译代码:

    gcc filter.c -lavformat -lavcodec -lavfilter  -lavutil

我得到以下未定义的参考错误:

    /tmp/cc90K2S5.o: In function `init_filters':
    filter.c:(.text+0x3e5): undefined reference to `av_int_list_length_for_size'
    filter.c:(.text+0x407): undefined reference to `av_int_list_length_for_size'
    filter.c:(.text+0x42d): undefined reference to `av_opt_set_bin'
    filter.c:(.text+0x482): undefined reference to `av_int_list_length_for_size'
    filter.c:(.text+0x4a4): undefined reference to `av_int_list_length_for_size'
    filter.c:(.text+0x4ca): undefined reference to `av_opt_set_bin'
    filter.c:(.text+0x51f): undefined reference to `av_int_list_length_for_size'
    filter.c:(.text+0x541): undefined reference to `av_int_list_length_for_size'
    filter.c:(.text+0x567): undefined reference to `av_opt_set_bin'
    /tmp/cc90K2S5.o: In function `print_frame':
    filter.c:(.text+0x76b): undefined reference to `av_frame_get_channel_layout'
    /tmp/cc90K2S5.o: In function `main':
    filter.c:(.text+0x831): undefined reference to `av_frame_alloc'
    filter.c:(.text+0x83d): undefined reference to `av_frame_alloc'
    filter.c:(.text+0x9de): undefined reference to `av_buffersrc_add_frame_flags'
    filter.c:(.text+0xa16): undefined reference to `av_buffersink_get_frame'
    filter.c:(.text+0xa58): undefined reference to `av_frame_unref'
    filter.c:(.text+0xab6): undefined reference to `av_frame_free'
    filter.c:(.text+0xac5): undefined reference to `av_frame_free'
    collect2: error: ld returned 1 exit status

我知道未定义的引用错误表明它无法找到从 filtering_audio.c 引用的函数,但这没有意义,因为这些函数应该存在于 FFmpeg 库中。

任何帮助表示赞赏,谢谢!

4

2 回答 2

2
  1. 这些不是编译器错误,而是链接器错误。
  2. 这些错误意味着您没有链接到您应该链接的库。您现在正在使用-lavformat -lavcodec -lavfilter -lavutil,您确定它是完整的并且您正在链接您想要的版本吗?

编辑:

我在这里用那个例子做了一个快速测试,我需要一个很大的库列表:

-lavformat
-lavcodec
-lavfilter
-lavutil
-lswresample
-lswscale
-lz
-lbz2
于 2013-06-02T17:29:27.530 回答
0

我遇到了同样的问题,正如你所说,这没有意义,因为它们在你已经添加的库中,但似乎你添加库的顺序会导致错误。这么有趣,所以我建议在 lavfilter 之前添加 lavutil。

为什么链接库的顺序有时会导致 GCC 出错?

于 2013-08-17T15:59:44.300 回答