如何从 Vala 编译器生成 GIR 文件?

Posted

技术标签:

【中文标题】如何从 Vala 编译器生成 GIR 文件?【英文标题】:How to generate GIR files from the Vala compiler? 【发布时间】:2011-03-03 02:44:54 【问题描述】:

我正在尝试使用带有 gobject 内省的 pygi 创建与 vala 库的 python 绑定。但是,我无法生成 GIR 文件(我计划随后将其编译为 typelib 文件)。根据文档 valac 应该支持生成 GIR 文件。

编译如下

helloworld.vala

public struct Point 
    public double x;
    public double y;


public class Person 

    public int age = 32;

    public Person(int age) 
        this.age = age;
    



public int main() 

    var p = Point()  x=0.0, y=0.1 ; 
    stdout.printf("%f %f\n", p.x, p.y);

    var per = new Person(22);
    stdout.printf("%d\n", per.age);

    return 0;


用命令

valac helloworld.vala --gir=Hello-1.0.gir

没有像预期的那样创建Hello-1.0.gir 文件。如何生成 gir 文件?

【问题讨论】:

【参考方案1】:

要生成 GIR,必须将要导出的函数放在同一个命名空间下

hello.vala

namespace Hello 
    public struct Point 
        public double x;
        public double y;
    

    public class Person 

        public int age = 32;

        public Person(int age) 
            this.age = age;
        
    


public int main() 

    var p = Hello.Point()  x=0.0, y=0.1 ; 
    stdout.printf("%f %f\n", p.x, p.y);

    var per = new Hello.Person(22);
    stdout.printf("%d\n", per.age);

    return 0;


然后运行以下命令。

valac hello.vala --gir=Hello-1.0.gir --library Hello-1.0

这将在当前目录中生成一个 gir 和一个 vapi 文件。

然后要生成typelib文件,需要运行

g-ir-compiler --shared-library=hello Hello-1.0.gir -o Hello-1.0.typelib

假设共享库已经编译为libhello.so

【讨论】:

以上是关于如何从 Vala 编译器生成 GIR 文件?的主要内容,如果未能解决你的问题,请参考以下文章

Vala vapi 文件文档

Vala的Makefile

为啥有些编译器更喜欢手工制作的解析器而不是解析器生成器?

Vala(类 C# 语言)编译成 C?

理解 vala 编译警告

c++ 编译器如何从 utf8 源文件生成 unicode 字符串文字