1

我创建了一个 gstreamer 插件,其中包含一个元素,当放入管道时会生成一些数据(通过遵循GStreamer Plugin Writer's Guide)。

我的问题是我无法在测试应用程序中加载我的插件。当我调用时gst_element_factory_make("myextractor", NULL),结果始终为 NULL。

更多数据(我不确定这是否相关):

当我gst-inspect在我的 dll 上运行时,我得到不完整的输出(使用 cygwin 生成的输出):

beq11049@beqleuleu1nb028 /cygdrive/c/work
$ /cygdrive/c/OSSBuild/GStreamer/v0.10.6/bin/gst-inspect.exe MyProject/Release/gstxyzlibrary.dll
Plugin Details:
  Name:                 myextractor
  Description:          XYZ Library
  Filename:             MyProject/Release/gstxyzlibrary.dll
  Version:              1.0
  License:              LGPL
  Source module:        myextractor
  Binary package:       MyProject
  Origin URL:           http://www.example.com/

  myextractor: XYZExtractor

  1 features:
  +-- 1 elements

如果我将此与 avisubtitle 插件(来自GStreamer Good Plug-ins软件包)进行比较,我得到的信息要少得多。

例如,我的插件说:

  1 features:
  +-- 1 elements

avisubtitle 插件说(使用生成$ /cygdrive/c/OSSBuild/GStreamer/v0.10.6/bin/gst-inspect.exe avisubtitle):

GObject
 +----GstObject
       +----GstElement
             +----GstAviSubtitle

我的问题:我需要关于如何调试/确定我缺少什么的建议(启用调试输出、设置和检查路径等)。我的测试代码(对 的调用gst_element_factory_make)是用 Songbird adon 编写的,但是如果我将代码放在单独的可执行文件中,我会得到相同的结果。

4

2 回答 2

2

这可能是因为加载器找不到您的插件,您应该检查您的插件是否在共享库路径中:

确保已将LD_LIBRARY_PATH环境变量设置为包含已编译插件的目录。

在 cygwin 中,将其添加到您的.profile, 或在运行程序之前运行它:

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/cygdrive/c/path/to/your/plugin/"

您还可以使用-L链接器选项在编译时指定搜索路径。

于 2010-06-26T09:47:22.423 回答
1

我不确定如何回答您的问题,因为可能缺少几件事。我想到了未解决的符号依赖关系(尽管不太可能,因为您实际上可以检查您的插件)或错误的注册,不知何故(也很难弄错),也许是我忽略的 songbird 或 windows 的问题。

但是,我只想澄清一件事:GStreamer 有可以包含一个或多个元素的“插件”(又名动态可加载库)。当您对插件或元素进行 gst-introspect 时,您会得到不同的输出!在“avisubtitle”的情况下,它是一个元素,您可以读取类层次结构。如果您检查插件(或库)“avi”或“/usr/lib/gstreamer-0.10/libgstavi.so”(在 Unix 上),您将获得它包含的元素列表和一些常见属性(版本、项目等..)。

例如,gst-introspect XYZ(XYZ 库或库路径)不同于gst-introspect XYZ(XYZ XYZ 库中元素的名称)

也许这会对你有所帮助。祝你好运!哦,错误/警告可以用环境变量显示GST_DEBUG=*:2

于 2010-06-28T21:18:35.493 回答