Создание файла Vapi для библиотеки Vala

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

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, который, как я думал, был неявным. Все еще пытаюсь исправить что-то еще, что мешает этому, но как только это будет сделано, я обновлю это, чтобы сказать, действительно ли это имеет значение.


person geoffjay    schedule 13.06.2016    source источник


Ответы (1)


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

valac --vapi my_library_name.vapi my_library.vala

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

При использовании vapigen вам нужно указать пакеты, которые он использует, поэтому вам нужно проверить, что вы включаете правильные флаги pkg-config, например:

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

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

person AlThomas    schedule 13.06.2016
comment
Использование --vapi имеет наибольший смысл, хотя явная установка GLib.Object в качестве базового класса сработала. Я просто пытался сгенерировать .deps с помощью vapigen, что я и сделал, но я просто пропустил правило для Vapi. - person geoffjay; 16.06.2016