【问题标题】:ffmpeg undefined references on multiple functionsffmpeg 对多个函数的未定义引用
【发布时间】:2019-05-03 03:42:52
【问题描述】:

我正在尝试编译在 Ubuntu 上使用 ffmpeg 的应用程序,但遇到以下错误。

undefined reference to `av_write_image_line2'
undefined reference to `av_hwframe_transfer_data'
undefined reference to `av_hwdevice_get_hwframe_constraints'
undefined reference to `av_hwframe_get_buffer'
undefined reference to `av_hwdevice_ctx_create_derived'
undefined reference to `xcb_xfixes_get_cursor_image_cursor_image'
undefined reference to `xcb_xfixes_query_version'
undefined reference to `avpriv_slicethread_execute'
undefined reference to `avcodec_parameters_to_context'
undefined reference to `xcb_xfixes_get_cursor_image_reply'
undefined reference to `av_hwdevice_find_type_by_name'
undefined reference to `av_hwframe_map'
undefined reference to `av_spherical_tile_bounds'
undefined reference to `av_malloc_array'
undefined reference to `av_hwframe_transfer_get_formats'
undefined reference to `av_hwframe_ctx_alloc'
undefined reference to `xcb_shape_rectangles'
undefined reference to `av_stereo3d_type_name'
undefined reference to `avpriv_slicethread_free'
undefined reference to `avpriv_slicethread_create'
undefined reference to `xcb_xfixes_get_cursor_image'
undefined reference to `av_hwframe_ctx_init'
undefined reference to `avpriv_register_devices'
undefined reference to `av_hwframe_constraints_free'
undefined reference to `av_audio_fifo_peek_at'
undefined reference to `av_get_extended_channel_layout'
undefined reference to `av_hwframe_ctx_create_derived'
undefined reference to `xcb_xfixes_query_version_reply'
undefined reference to `av_mallocz_array'
undefined reference to `av_read_image_line2'

我的ffmpeg版本:

ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.11) 20160609
configuration: --enable-pic --pkg-config-flags=--static --extra-libs='-lpthread -lm'
libavutil      56. 22.100 / 56. 22.100
libavcodec     58. 35.100 / 58. 35.100
libavformat    58. 20.100 / 58. 20.100
libavdevice    58.  5.100 / 58.  5.100
libavfilter     7. 40.101 /  7. 40.101
libswscale      5.  3.100 /  5.  3.100
libswresample   3.  3.100 /  3.  3.100

在我的 makefile 中,我在链接步骤中添加了 -lavutil -lavcodec -lavdevice -lavfilter -lavformat -lswresample -lswscale。

我做错了什么?这些在我拥有的 ffmpeg 版本中是否已弃用?

【问题讨论】:

  • 嗨!你能把你的makefile也包括进去吗?

标签: c++ ffmpeg


【解决方案1】:

ffmpeg 标头是纯 C 标头。因此,如果您尝试在 C++ 应用程序中使用它们,则需要用 extern "C" 声明包围 include 语句。例如:

extern "C"
{
    #include <libavcodec/avcodec.h>
}

如果不清楚该声明在做什么,herehere 有很好的解释。

【讨论】:

    【解决方案2】:

    这可能是由于您的编译器无法找到所需组件的正确位置。如果您知道他们的下落,您可以尝试使用“符号链接”将其链接到编译器正在查看的目录/位置。

    例如:

    ln -s /path/of/the/library /path/you/want/it/to/be/found

    【讨论】:

      猜你喜欢
      • 2014-07-26
      • 1970-01-01
      • 2014-08-20
      • 2012-04-24
      • 1970-01-01
      • 2019-09-05
      • 2011-09-19
      • 2017-10-17
      • 1970-01-01
      相关资源
      最近更新 更多