Перехват 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<iostream>

// 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::signal: STOP не похоже, чтобы бросить сигнал, который я могу захватить

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

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