Ubuntu-10.04 でコンパイルされたコードと、それと共にインストールしたコードがありました。Synaptic で 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 のバージョンを確認するにはどうすればよいでしょうか。