0

我有在 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?

4

3 回答 3

0

过错。我有一个调用引用了一个尚未创建的 gvariable。哑的。现在一切都很好。

于 2013-03-07T12:58:49.843 回答
0

您必须安装了旧的 glib,因为在较新的版本中,没有这样的警告。在你的电脑上找到所有的 glib 库,一个一个地重命名并构建,然后你就可以找出哪个现在在你的项目中工作了。然后检查您的构建选项和 glib 的相关 .pc 文件,以找出错误的库是如何参与您的构建的。警告在 gtype.c 中定义为 g_log (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, \"%s: You forgot to call g_type_init()", \ G_STRLOC); \

于 2013-04-19T08:54:59.133 回答
0

对于出现此错误的其他人,请确保您正在调用 gst_init。

于 2013-08-05T12:33:19.527 回答