Python-Bindungen für eine Vala-BibliothekPython

Python-Programme
Anonymous
 Python-Bindungen für eine Vala-Bibliothek

Post by Anonymous »

Ich versuche, Python-Bindungen zu einer Vala-Bibliothek zu erstellen, indem ich das folgende IBM-Tutorial als Referenz verwende.
Mein ursprüngliches Verzeichnis enthält die folgenden zwei Dateien:
test.vala

Code: Select all

using GLib;

namespace Test {

public class Test : Object {
public int sum(int x, int y) {
return x + y;
}
}

}
test.override

Code: Select all

%%
headers
#include 
#include "pygobject.h"
#include "test.h"
%%
modulename test
%%
import gobject.GObject as PyGObject_Type
%%
ignore-glob
*_get_type
%%
Und versuchen Sie, die Python-Modulquelle test_wrap.c mit dem folgenden Code zu erstellen:
build.sh

Code: Select all

#/usr/bin/env bash

valac test.vala -CH test.h
python /usr/share/pygobject/2.0/codegen/h2def.py test.h > test.defs
pygobject-codegen-2.0 -o test.override -p test test.defs > test_wrap.c
Der letzte Befehl schlägt jedoch mit einem Fehler fehl

Code: Select all

./build.sh
Ausgabe:

Code: Select all

Traceback (most recent call last):
File "/usr/share/pygobject/2.0/codegen/codegen.py", line 1720, in 
sys.exit(main(sys.argv))
File "/usr/share/pygobject/2.0/codegen/codegen.py", line 1672, in main
o = override.Overrides(arg)
File "/usr/share/pygobject/2.0/codegen/override.py", line 52, in __init__
self.handle_file(filename)
File "/usr/share/pygobject/2.0/codegen/override.py", line 84, in handle_file
self.__parse_override(buf, startline, filename)
File "/usr/share/pygobject/2.0/codegen/override.py", line 96, in __parse_override
command = words[0]
IndexError: list index out of range
Ist das ein Fehler in Pygobject oder stimmt etwas mit meinem Setup nicht? Was ist der beste Weg, um in Vala geschriebenen Code aus Python heraus aufzurufen?
Das Entfernen der zusätzlichen Zeile hat das aktuelle Problem behoben, aber jetzt, während ich mit der Erstellung des Python-Moduls fortfahre, stehe ich vor einem anderen Problem. Hinzufügen der folgenden C-Datei zu den beiden vorhandenen im Verzeichnis:
test_module.c

Code: Select all

#include 

void test_register_classes (PyObject *d);
extern PyMethodDef test_functions[];

DL_EXPORT(void)
inittest(void)
{
PyObject *m, *d;
init_pygobject();
m = Py_InitModule("test", test_functions);
d = PyModule_GetDict(m);
test_register_classes(d);
if (PyErr_Occurred ()) {
Py_FatalError ("can't initialise module test");
}
}
Und Erstellen mit dem folgenden Skript:
build.sh

Code: Select all

#/usr/bin/env bash

valac test.vala -CH test.h
python /usr/share/pygobject/2.0/codegen/h2def.py test.h > test.defs
pygobject-codegen-2.0 -o test.override -p test test.defs > test_wrap.c

CFLAGS="`pkg-config --cflags pygobject-2.0` -I/usr/include/python2.6/ -I."
LDFLAGS="`pkg-config --libs pygobject-2.0`"

gcc $CFLAGS -fPIC -c test.c
gcc $CFLAGS -fPIC -c test_wrap.c
gcc $CFLAGS -fPIC -c test_module.c
gcc $LDFLAGS -shared test.o test_wrap.o test_module.o -o test.so

python -c 'import test; exit()'
führt zu einem Fehler:

Code: Select all

./build.sh
Ausgabe:

Code: Select all

***INFO*** The coverage of global functions is 100.00% (1/1)
***INFO*** The coverage of methods is 100.00% (1/1)
***INFO*** There are no declared virtual proxies.
***INFO*** There are no declared virtual accessors.
***INFO*** There are no declared interface proxies.
Traceback (most recent call last):
File "", line 1, in 
ImportError: ./test.so: undefined symbol: init_pygobject
Wo ist das init_pygobject-Symbol definiert? Was habe ich übersehen, worauf ich verlinkt habe?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post