Je suis un utilisateur GStreamer/programmeur mais je n'ai jamais utilisé GLib directement. Recenty J'ai décidé d'utiliser GLib pour construire un GObject simple et profiter des avantages de la mise en œuvre du signal. (Je suis un programmeur Windows)GObject avertissement ne peut pas enregistrer type existant
J'ai développé une bibliothèque statique simple avec la définition GObject, implémentation. Le lien principal d'application statiquement avec cette bibliothèque et lien dinamically avec l'autre bibliothèque liée statiquement avec le premier aussi.
Si j'appelle
DummyObj * = factice (DummtyObj *) g_object_new (DUMMY_OBJ_TYPE, NULL);
de l'application principale cela fonctionne, mais si l'intérieur de la bibliothèque dynamique je tente de construire une instance DummyObj avec la même fonction, il échoue, dans la sortie, je peux lire
ne peut pas enregistrer le type exisiting ... '! initialization_value = 0' affirmation g_once_init_leave_ n'a g_object_new: affirmation 'G_TYPE_IS_OBJECT (object_tye)' a échoué
au lieu de cela, si est la bibliothèque dynamique le premier à appeler DummyObj * factice = (DummtyObj *) g_object_new (DUMMY_OBJ_TYPE, NULL) après si l'application principale appelle cette fonction, elle échoue avec la même erreur.
Est-ce que c'est comme si le premier contexte? qu'initialiser l'objet est le seul qui peut créer des instances de ce type d'objets.
Je suis un peu confus à ce sujet. Dans GStreamer je peux créer de nouveaux plugins dans mon application principale, à l'intérieur d'autres plugins, bibliothèques dynamiques, je n'ai jamais vu ces erreurs
J'espère avoir bien expliqué, l'anglais n'est pas ma langue maternelle et je pense que le problème est pas facile à expliquer.
Merci beaucoup
Il semble que le premier appel à g_object_new dans tous les contextes tentent d'enregistrer le type dans un hash_table. Le premier peut enregistrer le TYPE mais le second échoue toujours avec la même erreur. En regardant le code je ne suis pas capable de détecter pourquoi le second appel essaie de réenregistrer le type ... la fonction check_type_name_I de gtype.c échoue mais je ne sais pas pourquoi g_type_register_static est appelé dans les deux cas.