我有在 Ubuntu-10.04 上编译的代码以及我随它安装的任何东西。我让突触升级了我 12.04,现在在编译 c++ Gstreamer 程序时出现这些错误。该代码在 linux 上构建一个 .so 并在 windows 上交叉编译一个 .dll。so 实现了一种对讲机。
(process:18707): GLib-GObject-CRITICAL **: /build/buildd/glib2.0-2.32.3
/./gobject/gtype.c:2722: You forgot to call g_type_init()
(process:18707): GLib-CRITICAL **: g_once_init_leave: assertion
`result != 0' failed
(process:18707): GLib-GObject-CRITICAL **: /build/buildd/glib2.0-2.32.3
/./gobject/gtype.c:2722: You forgot to call g_type_init()
(process:18707): GLib-CRITICAL **: g_once_init_leave: assertion
`result != 0' failed
(process:18707): GStreamer-CRITICAL **: gst_element_get_state: assertion
`GST_IS_ELEMENT (element)' failed
在我的代码中,我有一个包含接收器管道的类和另一个用于发送器管道的类。实际的 Gstreamer 内容是在不同线程中启动的 run() 方法中。
抛出这些错误的关键是第一次调用构造函数(它们是对称的),我在其中声明了一些 GstXXXX(例如 GstElement)变量,但尚未启动另一个线程。这需要调用 start() 方法。
我尝试使用 gtk_init() 作为一个论坛条目的建议。我将所有 pkg-config 调用添加到 eclipse,但它仍然说 gtk_init() 是一个未知调用。显然我并没有那么工作,但我不应该需要它。我不习惯。我现在把它注释掉了。
那么,有人可以建议可能导致 gtk/gst 抱怨的原因。
我注意到 g_type_init() 在 glib 2.36 版之后被弃用(我认为他们的意思是 glib)。那么,我如何知道安装了哪个版本的 glib?