2016-06-13 66 views
1

我有一個用Vala編寫的庫,一直工作正常,爲自己生成一個.vapi文件,我認爲這是一個免費的操作,但我對此並不積極。我去,並試圖在我的configure.ac文件中使用VAPIGEN_CHECK和我Makefile.am相關VAPIGEN_MAKEFILE,現在我得到:生成Vala庫的Vapi文件

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。仍然試圖解決其他一些阻止這個問題的方法,但一旦完成,我會更新它來說明它是否真的很重要。

回答

1

爲了從一個瓦拉程序VAPI文件,你只需要使用--vapi選項與valac,如:

valac --vapi my_library_name.vapi my_library.vala

從你所描述的,我認爲你生成一個GIR(GObject的自省庫)文件與valac,然後使用vapigen創建VAPI文件。 vapigen是Vala的一部分,並在Vala源代碼中維護,但它是生成VAPI文件以綁定到非Vala項目的工具。如果非Vala項目分發一個GIR文件,它使得綁定非常容易。

當使用vapigen你需要給它使用的包,所以你需要檢查要包括正確的pkg配置標誌,如:

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

另一種可能性是沒有約束力對於Vala中的GTypeInstance。我有一個快速的看,我沒有找到任何東西。

+0

使用'--vapi'最有意義,明確地將GLib.Object設置爲基類。我只是試圖用'vapigen'生成'.deps',我無論如何都只是忽略了Vapi的規則。 – geoffjay