Bonjour,
Admettons le code Fortran suivant (add_f.f90) :
Je peux le compiler en une library comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 function add(x, y) implicit none double precision :: add double precision, intent(in) :: x, y add = x + y end function add
Je peux vérifier le contenu de la library :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2gfortran -c -fno_underscoring add_f.90 gfortran -shared -fPIC -o add_f.so add_f.o
Je souhaite maintenant appeler la fonction add depuis un script Python. Je me suis inspiré pour cela du sujet suivant : https://www.developpez.net/forums/d2.../#post11404304
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6nm -D add_f.so 00000000000010f9 T add w __cxa_finalize w __gmon_start__ w _ITM_deregisterTMCloneTable w _ITM_registerTMCloneTable
Qui me renvoie un messagre d'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 import ctypes # Définition de la fonction add depuis la library libf = ctypes.CDLL('add_f.so') func = libf.add # Définition du type des arguments et de la sortie func.argtypes = [ctypes.c_double, ctypes.c_double] func.restype = ctypes.c_double # test res = func(1.2, 3) print(res)
Si je ne spécifie pas le type des arguments j'ai un message d'erreur de type TypeError.
Code : Sélectionner tout - Visualiser dans une fenêtre à part /tmp/geany_run_script_SE8FJ0.sh: line 7: 54151 Segmentation fault
Qu'est-ce qui est incorrect ici ?
J
Partager