Cross compiling Python/API C

a marqué ce sujet comme résolu.

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 ?

+0 -0

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.

+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 !

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

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