Перехват Fortran STOP из C ++

Я подготовил интерфейс C ++ к устаревшей библиотеке Fortran.

Некоторые подпрограммы в устаревшей библиотеке следуют уродливому, но пригодному для использования соглашению о кодах состояния, чтобы сообщать об ошибках, и я использую такие коды состояния, чтобы генерировать читабельное исключение из моего кода C ++: это прекрасно работает.

С другой стороны, иногда устаревшая библиотека вызываетSTOP (что завершает программу). И он часто делает это, хотя состояние можно исправить.

я бы хотелзахватить этотSTOP изнутри C ++, и до сих пор мне не удалось.

Следующий код прост, но точно представляет проблему под рукой:

Библиотека наследия Фортрана:fmodule.f90

module fmodule
  use iso_c_binding
  contains
    subroutine fsub(x) bind(c, name="fsub")
      real(c_double) x
      if(x>=5) then 
         stop 'x >=5 : this kills the program'
      else
         print*, x
      end if
    end subroutine fsub    
end module fmodule

Интерфейс C ++:main.cpp

#include

// prototype for the external Fortran subroutine
extern "C" {
  void fsub(double& x);  
}

int main() {  
  double x;
  while(std::cin >> x) {
    fsub(x);
  }
  return 0;
}

Строки компиляции (GCC 4.8.1 / OS X 10.7.4;$ обозначает командную строку):

$ gfortran -o libfmodule.so fmodule.f90 -shared  -fPIC -Wall
$ g++ main.cpp -L. -lfmodule -std=c++11

Бег:

$ ./a.out 
1
   1.0000000000000000     
2
   2.0000000000000000     
3
   3.0000000000000000     
4
   4.0000000000000000     
5
STOP x >=5 : this kills the program

Как я мог захватитьSTOP и, скажем, запросить другой номер. Обратите внимание, что яне хочу трогать код Фортрана.

Что я пробовал:

std::atexit: не могу "Вернись" из него однажды я ввел его:std::signalSTOP кажется, не дает сигнал, который я могу захватить

Ответы на вопрос(4)

Ваш ответ на вопрос