Я пытаюсь создать привязку Python к vala библиотеке с помощью pygi с gobject самоанализом. Однако я испытываю затруднения при генерации файлов 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 файл?
Чтобы сгенерировать 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 в текущем каталоге.
Затем, чтобы сгенерировать файл библиотеки типов, нужно запустить
g-ir-compiler --shared-library=hello Hello-1.0.gir -o Hello-1.0.typelib
, предполагая, что разделяемая библиотека была скомпилирована в libhello.so