2016-06-13 16 views
1

У меня есть библиотека, написанная в Вала, которая всегда работала отлично, создавая файл .vapi для себя, я думаю, потому что это бесплатная операция с valac, но я не уверен в этом. Я пошел и пытался использовать VAPIGEN_CHECK в моем configure.ac файл и связанный с ним VAPIGEN_MAKEFILE в моем Makefile.am и теперь я получаю:Создание файла Vapi для библиотеки Vala

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

Мой файл, соответствующий .gir содержит:

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

Таким образом, ошибка, кажется, имеет смысл потому что я не могу найти класс GObject.TypeInstance в любом файле .vapi, но GTypeInstance находится в одном из заголовков GLib.

Должен ли я делать это так, если я пишу все в Вале? Есть ли вероятность, что этого не хватает в Vapi?

Редактировать: Возможно, только из-за того, что я не получил GLib.Object, который, как я думал, был неявным. Все еще пытаюсь исправить что-то еще, что мешает этому, но как только это будет сделано, я обновлю это, чтобы сказать, действительно ли это имеет значение.

ответ

1

Для создания файла VAPI из программы Вала вы должны просто использовать опцию --vapi с valac, например:

valac --vapi my_library_name.vapi my_library.vala

Из того, что вы описываете, я думаю, что вы генерируете GIR (GObject интроспекции Repository) с valac, затем с помощью vapigen для создания файла VAPI. vapigen является частью Vala и поддерживается в исходном коде Vala, но это инструмент для создания файла VAPI для привязки к не-Vala-проектам. Если проект не-Вала распространяет файл GIR, он упрощает привязку.

При использовании vapigen вам необходимо предоставить пакеты, которые он использует, так что вы должны проверить, вы в том числе правильных флагов PKG-конфигурации, например:

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

Другая возможность заключается в том нет привязки для GTypeInstance в Вала. У меня был быстрый взгляд, и я ничего не нашел.

+0

Использование '--vapi' имеет смысл, явно устанавливая' GLib.Object', поскольку базовый класс действительно работал. Я просто пытался сгенерировать '.deps', используя' vapigen', который я сделал, так или иначе, что я просто исключил правило для Vapi. – geoffjay