Ich habe ein kleines Problem mit NaN-Traps, während ich Ctypes und gemeinsame Bibliothek verwenden. Die Bibliothek wurde in Fortran geschrieben und besteht aus dem Unterprogramm, das die Zeile ‚Division durch Null‘ hat:Setup NaN-Traps in der gemeinsam genutzten Bibliothek
nantest.f90
subroutine nantest
real :: a, b, c
a = 0.
b = 0.
c = a/b
print *, c,a,b
end subroutine nantest
program main
call nantest
end program main
Ich habe eine gemeinsame Bibliothek von ihm die Optionen:
gfortran -o nantest.os -c -g -fbacktrace -ffpe-trap=invalid,zero,overflow -fPIC nantest.f90
gfortran -o libnantest.so -shared nantest.os
Dann ist dieses Ich lade Bibliothek direkt aus dem Python-Skript:
from ctypes import *
lib = CDLL('./libnantest.so')
lib.nantest_()
und es gibt mir die Ausgabe ohne Ausnahme:
NaN 0.00000000 0.00000000
Was ist los? Ist es Ctypes oder Compileroptionen Problem? BTW, wenn ich die direkte Ausführung von ‚nantest‘ Programm durchgeführt mit den gleichen Compiler-Optionen gebaut Ich habe, was ich wollte:
Program received signal SIGFPE: Floating-point exception - erroneous arithmetic operation.
Backtrace for this error:
#0 0x7F4D08B6FE08
#1 0x7F4D08B6EF90
#2 0x7F4D087C04AF
#3 0x40080D in nantest_ at nantest.f90:7
#4 0x4008B9 in MAIN__ at nantest.f90:14
Floating point exception
Also, wie kann ich die NaN-Ausnahme in dem gemeinsamen genutzten Bibliothek Fall bekommen? Irgendwelche Empfehlungen?