Thread "Hallo Welt" in XS (18 answers)
Opened by hlubenow at 2020-01-08 18:32

hlubenow
 2020-01-11 17:45
#191101 #191101
User since
2009-02-22
875 Artikel
BenutzerIn
[default_avatar]
Und dasselbe geht auch für Python (sehr cool):

hello.c
Code (C): (dl )
1
2
3
4
5
6
7
8
#include <stdio.h>

void inithello() {
}

void printHello() {
    printf("Hello World!\n");
}


hello.i
Code: (dl )
1
2
3
4
5
%module hello
%{
%}
extern void inithello();
extern void printHello();


compile_hello
Code (shell): (dl )
1
2
3
4
5
6
7
8
9
10
#!/bin/bash

PYTHONINCLUDEPATH="/usr/include/python"
MODULENAME="hello"

swig -python "$MODULENAME".i

gcc -fpic -c -Dbool=char -I"$PYTHONINCLUDEPATH" "$MODULENAME"_wrap.c "$MODULENAME".c -D_GNU_SOURCE

gcc -shared "$MODULENAME".o "$MODULENAME"_wrap.o -o _"$MODULENAME".so


test.py
Code (python): (dl )
1
2
3
4
5
#!/usr/bin/python

import hello

hello.printHello()

Da der Dateiname "hello.py" für das Modul belegt ist, heißt das Testskript "test.py" (Bei Perl haben Skripte ja die Endung ".pl", Module die Endung ".pm". Dadurch kann man sie unterscheiden. Bei Python haben beide die Endung ".py".)
Um "_hello.so" von "hello.py" beim Importieren zu unterscheiden (da heißt es ja nur "import hello"), bekommt die ".so"-Datei am Anfang diesen Unterstrich. Also "_hello.so".
Last edited: 2020-01-11 17:52:15 +0100 (CET)

View full thread "Hallo Welt" in XS