私はGStreamerのユーザ/プログラマですが、私はGLibを直接使用していませんでした。私はGLibを使って単純なGObjectを構築し、シグナル実装を利用することに決めました。 (私はWindowsプログラマです)GObject警告は既存のタイプを登録できません
私は、GObjectの定義、実装で単純な静的ライブラリを開発しました。メインアプリはこのライブラリと静的にリンクしており、他のライブラリとのリンクは最初のものと静的にリンクしています。私が呼び出す場合
DummyObj *ダミー=(DummtyObj *)g_object_new(DUMMY_OBJ_TYPE、NULL);それが動作メインアプリから
が、動的ライブラリ内の私は、同じ機能をDummyObjインスタンスを構築しようとした場合、それは失敗し、出力に私は
を読むことができますexisitingタイプを登録することはできません... g_once_init_leave_アサーション '!initialization_valueは= 0' g_object_newを失敗しました:動的ライブラリは DummyObj *ダミー=(DummtyObj *)g_object_new(DUMMY_OBJ_TYPE、NULLを呼び出すための最初のものである場合、アサーション 'G_TYPE_IS_OBJECT(object_tye)' は、代わりに
を失敗しました); メインアプリケーションがこの関数を呼び出すと、同じエラーで失敗します。
最初のコンテキストと似ていますか?この種のオブジェクトのインスタンスを作成できるのは、オブジェクトを初期化する唯一のオブジェクトです。
これについて少し混乱しています。 GStreamerでは、メインアプリケーション、他のプラグイン、ダイナミックライブラリ内に新しいプラグインを作成できます。これらのエラーは一度も表示されません。
英語が母国語ではないと私は思っています。説明するのは簡単ではありません。
どうもありがとう
すべてのコンテキストでg_object_newする最初の呼び出しはhash_tableにTYPEを登録しようとしているようです。最初のものはTYPEを登録できますが、2番目のものは常に同じエラーで失敗します。コードを見ると、なぜ2番目の呼び出しが型を再度登録しようとしたのかを検出できません... gtype.cのcheck_type_name_I関数は失敗しますが、なぜg_type_register_staticがどちらの場合に呼び出されるのかわかりません。