【问题标题】:Loading gstreamer plugins in static executable在静态可执行文件中加载 gstreamer 插件
【发布时间】:2018-03-13 15:25:27
【问题描述】:

我需要使用 gstreamer 构建一个静态 Linux 可执行文件,并使用 coreelements 插件中的队列工厂。我所做的是:

  • 配置 gstreamer(版本 1.12.4):./configure --enable-static --disable-shared --enable-static-plugins
  • 构建它和 gst-plugin-base
  • 在我的代码中添加: GST_PLUGIN_STATIC_DECLARE(coreelements); GST_PLUGIN_STATIC_REGISTER(coreelements);
  • 将我的应用与 libgstcoreelements.a 相关联(连同 gstreamer-1.0、gstbase-1.0 和 gstapp-1.0)

链接失败: undefined reference to gst_plugin_coreelements_register()

我可以验证gst_plugin_coreelements_register 在静态库文件中:

$ nm libgstcoreelements.a |grep gst_plugin_coreelements_register 00000000000002c0 T gst_plugin_coreelements_register

你知道我做错了吗?

【问题讨论】:

    标签: static-libraries gstreamer


    【解决方案1】:

    我缺少的是第一个 gstreamer 宏周围的 extern "C" { } 块,因为它声明了一个外部 C 样式函数,并且我的应用程序是使用 g++ 编译的:

    extern "C" {
    GST_PLUGIN_STATIC_DECLARE(coreelements);
    }
    

    【讨论】:

    • 我编译纯c代码并与gcc/ld链接,仍然有同样的问题。 nm main.o | grep coreelements 显示 U gst_plugin_coreelements_registernm libgstcoreelements.a | grep coreelements 显示 0000000000000100 T gst_plugin_coreelements_register。他们怎么不互相融合?
    • 问题是我实际上并没有链接到libgstcoreelements.a,它位于lib/gstreamer-1.0(不是lib)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-10
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 2021-05-28
    • 1970-01-01
    相关资源
    最近更新 更多