我创建了一个gstreamer插件,里面有一个元素,当放入管道时会生成一些数据(通过跟GStreamer Plugin Writer's Guide)。
我的问题是我无法在测试应用中加载我的插件。当我调用gst_element_factory_make("myextractor", NULL)
时,结果始终为NULL。
更多数据(我不确定这是否相关):
当我在我的dll上运行gst-inspect
时,输出不完整(使用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编写的,但如果我把代码放在一个单独的可执行文件中,我会得到相同的结果。
答案 0 :(得分:2)
可能是因为加载程序无法找到您的插件,您应该检查您的插件是否位于共享库路径中:
确保已将LD_LIBRARY_PATH
环境变量设置为包含已编译插件的目录。
在cygwin中,将其添加到.profile
,或在运行程序之前运行它:
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/cygdrive/c/path/to/your/plugin/"
您还可以使用-L
链接器选项在编译时指定搜索路径。
答案 1 :(得分:0)
我不知道如何回答你的问题,因为可能会遗漏几件事。我认为未解决的符号依赖(虽然不太可能,因为你实际上可以检查你的插件)或错误的注册,不知何故(它也很难弄错),也许是我忽略的鸣鸟或窗口问题。
但是,我只想清除一件事:GStreamer有“插件”(也称为动态可加载库),可以包含一个或多个元素。当您对插件或元素进行内省时,您会得到不同的输出!在“avisubtitle”的情况下,它是一个元素,您可以读取类层次结构。如果您反省插件(或库)“avi”或“/usr/lib/gstreamer-0.10/libgstavi.so”(在Unix上),您将获得它包含的元素列表和一些常见属性(版本,项目等) ..)。
例如,gst-introspect XYZ
(XYZ是库或库的路径)与gst-introspect XYZ
不同(XYZ是XYZ库中元素的名称)
也许这会对你有所帮助。祝好运!哦,可以使用环境变量GST_DEBUG=*:2