wrapper python pour une lib en C

Bonjour ici,

j’ai un petit souci avec une lib en C que j’ai produite avec une seule fonction.

Le code C de toto.c :

#include <stdio.h>

char * titi(void) {
	return "Hello world!";
}

qui donne toto.so.

Le wrapper python toto.py :

from ctypes import CDLL, c_char_p

# Load the shared library
toto = CDLL("./toto.so")
toto.titi.restype = c_char_p

Et le code de test test_toto.py :

import toto

print(toto.titi())

Voilà, un truc assez basique, j’ai jeté un oeil à pas mal de tutos, et j’obtiens toujours la même erreur quand j’utilise le dernier script :

Traceback (most recent call last):
  File "test_toto.py", line 1, in <module>
    import toto
ImportError: dynamic module does not define module export function (PyInit_toto)

Si j’exécute la fonction titi depuis le fichier toto.py, elle est bien appelée sans souci. Mais il semble que je ne puisse pas l’appeler depuis un import.

Sur les internets ça parle de version de compilateur,… Si vous avez une idée, je suis preneur !

C’est juste que quand Python voit ton .so et ton .py au moment de l’import il préfère charger le .so.

Ce qui t’indique que tu peux faire ça sans wrapper si ton .so contient un module Python (cf. 1. Extending Python with C or C++ — Python 3.13.1 documentation).

Tout simplement…

Han ! Et moi qui essayait de tout nommer comme il faut !

Je veux bien que mon .so contienne un module Python, mais il va falloir que je comprenne le truc avant :smiley:

Merci <3