Appeler une fonction d'une DLL compilée depuis Fortran
Bonjour,
Admettons le code Fortran suivant (add_f.f90) :
Code:
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 le compiler en une library comme ceci :
Code:
1 2
| gfortran -c -fno_underscoring add_f.90
gfortran -shared -fPIC -o add_f.so add_f.o |
Je peux vérifier le contenu de la library :
Code:
1 2 3 4 5 6
| nm -D add_f.so
00000000000010f9 T add
w __cxa_finalize
w __gmon_start__
w _ITM_deregisterTMCloneTable
w _ITM_registerTMCloneTable |
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:
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) |
Qui me renvoie un messagre d'erreur :
Code:
/tmp/geany_run_script_SE8FJ0.sh: line 7: 54151 Segmentation fault
Si je ne spécifie pas le type des arguments j'ai un message d'erreur de type TypeError.
Qu'est-ce qui est incorrect ici ?
J