2013-03-06 78 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。