2016-06-13 21 views
1

Ich habe eine in Vala geschriebene Bibliothek, die immer gut funktioniert hat, indem ich eine .vapi Datei für mich selbst erstellte, denke ich, weil es eine kostenlose Operation mit valac ist, aber ich bin nicht davon überzeugt. Ich ging hin und versuchte VAPIGEN_CHECK in meiner configure.ac-Datei zu verwenden und die VAPIGEN_MAKEFILE in meinem Makefile.am zugeordnet ist, und jetzt bekomme ich:Erzeugen einer Vapi-Datei für eine Vala-Bibliothek

error: The type name `GLib.TypeInstance' could not be found 

Meine entsprechenden .gir Datei enthält:

<field name="parent_instance"> 
    <type name="GObject.TypeInstance" c:type="GTypeInstance"/> 
</field> 

So ist der Fehler scheint Sinn zu machen weil ich die GObject.TypeInstance class/struct in keiner .vapi Datei finden kann, aber GTypeInstance ist in einem der GLib-Header.

Soll ich es sogar so machen, wenn ich schon alles in Vala schreibe? Gibt es eine Möglichkeit, dass dies beim Vapi fehlt?

Edit: Möglicherweise nur wegen meiner nicht abgeleitet GLib.Object, die ich dachte, war implizit. Ich versuche immer noch, etwas anderes zu reparieren, das dies verhindert, aber sobald das erledigt ist, werde ich das aktualisieren, um zu sagen, ob es wirklich wichtig ist oder nicht.

Antwort

1

Um eine VAPI Datei aus einem Vala Programm zu erzeugen Sie einfach die --vapi Option mit valac, zB verwenden sollten:

valac --vapi my_library_name.vapi my_library.vala

Von dem, was Sie beschreiben, ich glaube, Sie erzeugen eine GIR (GObject Introspection Repository) Datei mit valac, dann mit vapigen, um die VAPI-Datei zu erstellen. vapigen ist Teil von Vala und wird im Vala-Quellcode verwaltet, aber es ist ein Tool zum Generieren einer VAPI-Datei zum Binden an Nicht-Vala-Projekte. Wenn das Non-Vala-Projekt eine GIR-Datei verteilt, wird die Bindung sehr einfach.

Wenn vapigen verwenden, müssen Sie die Pakete geben, es verwendet, so dass man Sie mit den richtigen pkg-config-Flags überprüfen müssen, zB:

vapigen --pkg glib-2.0 --pkg gobject-2.0 my_library.gir

Die andere Möglichkeit ist, gibt es keine Bindung für GTypeInstance in Vala. Ich habe mich kurz umgeschaut und ich finde nichts.

+0

Die Verwendung von '--vapi' ist am sinnvollsten, da' GLib.Object' explizit als Basisklasse definiert wurde. Ich habe gerade versucht, die '.deps' mit' vapigen' zu erzeugen, was ich auch getan habe. Ich habe die Regel für das Vapi einfach weggelassen. – geoffjay