У меня возникают проблемы с выводом из приложения fortran, выполняемого из Matlab. Мы используем Matlab для вызова ряда приложений fortran и отображения вывода и результатов.
Я использую gfortran в OSX для создания одной из этих программ, которая выполняет большой объем вывода в файл и небольшой вывод в стандартный вывод для отслеживания прогресса. Вывод на стандартный вывод выполняется в основном с помощью операторов print *, но я также пробовал писать (*, *). Программа использует OpenMP, но ни один из операторов print * или write (*, *) не выполняется в параллельных секциях OpenMP. Все работает нормально, когда программа выполняется с терминала. Однако, когда программа выполняется изнутри Matlab, нет вывода из stdout. Однако вывод файла работает нормально.
Кроме того, тот же код, скомпилированный с помощью ifort Intel, без проблем отображает свой вывод в Matlab. К сожалению, у меня нет постоянного доступа к компилятору Intel.
Я уверен, что вывод будет на стандартный вывод (а не на стандартный поток), и я попытался очистить оба кода из кода (вызовите flush (6) и вызовите flush (0)), но это, похоже, не вызывает разница.
Я не уверен, что могло быть причиной этого. Есть предположения?
некоторая важная информация: ОС: OSX 10.6.8 (64-битный режим)
Матлаб: R2012b
gfortran: 4.7.2 (получено через fink)
флаги компиляции: -cpp -fopenmp -ffree-line-length-0 -fno-range-check -m64 -static-libgfortran -fconvert = little-endian -fstrict-aliasing
РЕДАКТИРОВАТЬ:
Я провел еще несколько тестов, создав простую программу приветствия:
program printTest
write (*,*) 'hello'
end program
составлено с помощью ...
gfortran test.f90 -o test
который демонстрирует такое же поведение.
Я также пробовал компилировать с более ранней версией gfortran (4.2.1), которая дала некоторые интересные результаты. он отлично работает в терминале, но в Matlab я получаю следующее:
! ./ test dyld: сбой ленивого связывания символа: символ не найден: __gfortran_set_std Ссылка на: /Users/sah/Desktop/./test Ожидается в: /Applications/MATLAB_R2012b.app/sys/os/maci64/libgfortran.2.dylib
dyld: символ не найден: __gfortran_set_std Ссылка из: /Users/sah/Desktop/./test Ожидается в: /Applications/MATLAB_R2012b.app/sys/os/maci64/libgfortran.2.dylib
./test: Ловушка трассировки / точки останова
Это заставляет меня думать, что это проблема с библиотекой. использование -static-libgfortran в этом случае дает тот же результат.