0

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

私のコードには、レシーバー パイプラインを含むクラスと、センダー パイプライン用の別のクラスがあります。実際の G​​streamer のものは、別のスレッドで起動される 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 ライブラリを検索し、1 つずつ名前を変更してビルドすると、プロジェクトで現在どのライブラリが機能しているかを確認できます。次に、ビルド オプションと関連する glib の .pc ファイルをチェックして、間違ったライブラリがビルドにどのように関与しているかを調べます。警告は gtype.c で g_log (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, \ "%s: You forget to call g_type_init()", \ G_STRLOC); として定義されています。\

于 2013-04-19T08:54:59.133 に答える