我有一个用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标题中。
如果我已经在Vala中编写所有内容,我是否应该这样做?是否有可能Vapi缺少这个?
编辑:可能只是因为我没有得出GLib.Object
,我认为这是隐含的。仍然试图修复阻止这种情况的其他事情但是一旦完成,我会更新它以说明它是否真的重要。
答案 0 :(得分:1)
要从Vala程序生成VAPI文件,您只需将--vapi
选项与valac
一起使用,例如:
valac --vapi my_library_name.vapi my_library.vala
根据您的描述,我认为您正在使用valac
生成GIR(GObject Introspection Repository)文件,然后使用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没有绑定。我快速浏览了一下,但我找不到任何东西。