【问题标题】:Generating a Vapi file for a Vala library为 Vala 库生成 Vapi 文件
【发布时间】:2016-06-13 19:49:25
【问题描述】:

我有一个用 Vala 编写的库,它总是可以很好地为自己生成一个 .vapi 文件,我认为因为它是 valac 的免费操作,但我对此并不积极。我去尝试在我的configure.ac 文件中使用VAPIGEN_CHECK,并在我的Makefile.am 中使用关联的VAPIGEN_MAKEFILE,现在我得到了:

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

我对应的.gir文件包含:

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

所以这个错误似乎是有道理的,因为我在任何 .vapi 文件中都找不到 GObject.TypeInstance 类/结构,但 GTypeInstance 在 GLib 标头之一中。

如果我已经在 Vala 中编写所有内容,我还应该这样做吗? Vapi 是否有可能缺少此功能?

编辑:可能只是因为我没有得到GLib.Object,我认为这是隐含的。仍在尝试修复阻止此问题的其他问题,但一旦完成,我将更新此内容以说明它是否真的重要。

【问题讨论】:

    标签: vala vapi


    【解决方案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 绑定。我快速浏览了一下,没有找到任何东西。

    【讨论】:

    • 使用--vapi 是最有意义的,但明确地将GLib.Object 设置为基类确实有效。我只是想使用vapigen 生成.deps,无论如何我只是省略了Vapi 的规则。
    猜你喜欢
    • 2011-01-30
    • 1970-01-01
    • 2012-06-27
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多