2013-03-06 97 views
0

我有在Ubuntu-10.04上编译的代码以及我用它安装的任何代码。我让突触升级我12.04,现在我编译C++ Gstreamer程序时出现这些错误。该代码在Linux上构建.so,并在Windows上交叉编译.dll。这样实现了一种对讲机。gstreamer,glib和gtk的错误。

(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()方法。

引发这些错误的是第一次调用consgtructor(它们是对称的),我声明了一些GstXXXX(例如GstElement)变量,但尚未启动另一个线程。这需要调用start()方法。

我尝试使用gtk_init()作为建议的一个论坛条目。我将所有pkg-config调用添加到eclipse中,但仍然说gtk_init()是未知的调用。显然我不太会有那个工作,但我不应该需要它。我不习惯。我现在已经注释掉了。

那么,有人可以建议什么可能会导致gtk/gst抱怨。

我注意到g_type_init()在glib的版本2.36(我认为它们意味着glib)之后被弃用。那么,我怎么知道哪个版本的glib已经安装?

+0

思考这个问题,它就更没有意义了。我还有其他非常相似的gstreamer应用程序,它们可以很好地工作。我打算用调试器进行一些窥探。 – 2013-03-07 12:35:41

+0

我不明白你的问题:为什么你只是不按照错误提示添加'g_type_init()'? – ntd 2013-03-07 12:44:46

回答

0

Mea Culpa。我有一个调用引用了一个尚未创建的变量。哑。一切都很好。

0

您必须安装一个旧的glib,因为在较新的版本中没有这样的警告。在你的计算机上查找所有的glib库,将它们逐个重命名并构建,然后你就可以找出哪一个现在适用于你的项目。然后检查你的构建选项和glib的相关.pc文件,以了解如何在构建中涉及错误的库。 警告在gtype.c定义为 g_log(G_LOG_DOMAIN,G_LOG_LEVEL_CRITICAL,\ “%S:你忘了打电话给g_type_init()”,\ G_STRLOC); \

0

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