Cross compiling Python/API C

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour à tous,

Je souhaiterais créer un module python à l'aide de l'API/C et c'est réussi du côté Unix. Voilà le déroulement ci-dessous…

functions.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#include <python3.4/Python.h>
#include <stdio.h>

PyObject *stripChar(const char *s, char c)
{
    int i, j=0;
    char res[2048];

    for (i=0; s[i]!='\0'; i++)
    {
        if (s[i] != c)
        {
            res[j] = s[i];
            j++;
        }
    }

    res[j] = '\0';

    return PyBytes_FromString(res);
}

Puis

1
2
gcc -c functions.c -fPIC
ld -o functions.so -shared functions.o -lpython3.4m

functions.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
from ctypes import *

dll = CDLL('/home/fred1599/functions.so')
strip = dll.stripChar
strip.restype = py_object
strip.argstype = [py_object, py_object]

def myStrip(myStr, myChar):
    myStr = c_char_p(myStr)
    myChar = c_char(myChar)
    return strip(myStr, myChar)

Tout fonctionne, ma question est en rapport avec le fait que je ne veux pas changer d'environnement de travail, je n'ai pas windows ! Je voudrais donc créer une librairie (dll) me permettant d'utiliser la fonction myStrip autant sous Unix que sous Microsoft.

Cette fonction fait office d'exemple, vous l'aurez bien compris afin d'avoir une manière simple de faire du cross compiling sous Ubuntu, mon système d'exploitation.

Quelle est pour vous la meilleure façon de faire ?

Édité par firm1

+0 -0
Staff

OK, c'est typiquement cross-compiler un programme sous linux, pour Windows.

Peut-être que ce billet t'aidera ?

J'ignore comment gérer la dépendance à la libPython, par contre. Je suppose qu'il faut que la version Windows de la bibliothèque soit présente quelque part dans l'environnement pour que les liens s'éditent correctement.

Édité par nohar

I was a llama before it was cool

+0 -0

MingW semble pourtant le bon point de départ, puisqu'il intègre le linker (il me semble). Il faudrait donc réussir à dire au linker, par MingW, qu'il doit produire un .dll et non un .exe .

N'ayant pas encore utilisé mingw, je ne peux pas t'en dire plus.

Bonne soirée !

There is no place like /home.

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte