У меня есть небольшая проблема с ловушками NaN, когда я использую ctypes и общую библиотеку. Библиотека была написана на языке Фортран и состоит из подпрограммы, которая имеет «деление на ноль» линии:Настройка ловушек NaN в общей библиотеке
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
Я сделал общую библиотеку из него с помощью опции:
gfortran -o nantest.os -c -g -fbacktrace -ffpe-trap=invalid,zero,overflow -fPIC nantest.f90
gfortran -o libnantest.so -shared nantest.os
Тогда я загружаю это библиотека прямо из скрипта Python:
from ctypes import *
lib = CDLL('./libnantest.so')
lib.nantest_()
и это дает мне выход без каких-либо исключений:
NaN 0.00000000 0.00000000
Что не так? Это проблемы с типами или компиляторами? Кстати, когда я выполнил непосредственное выполнение программы «nantest» построен с теми же опциями компилятора, которые я получил то, что хотел:
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
Итак, как я могу получить NaN-исключение в общей библиотеке случае? Любые рекомендации?