Matlab 内から実行されている Fortran アプリケーションからの出力に問題があります。Matlab を使用して、多数の Fortran アプリケーションを呼び出し、出力と結果を表示します。
OSX で gfortran を使用して、これらのプログラムの 1 つを構築しています。このプログラムは、大量のファイル出力と stdout への少量の出力を行って進行状況を追跡します。stdout 出力は、主に print * ステートメントを使用して行われますが、write( * , * ) も試しました。プログラムは OpenMP を使用しますが、print * または write( * , * ) ステートメントは OpenMP 並列セクション内で実行されません。プログラムを端末から実行すると、すべて正常に動作します。ただし、プログラムが matlab 内から実行される場合、stdout からの出力はありません。ただし、ファイル出力は正常に機能します。
さらに、同じコードを Intel の ifort でコンパイルすると、その出力が問題なく matlab に表示されます。残念ながら、Intel コンパイラに定期的にアクセスすることはできません。
出力が stdout (stderr ではない) に出力されることは確信しており、コード内から両方をフラッシュしようとしました (flush(6) を呼び出し、flush(0) を呼び出します)。違い。
何が原因なのかわかりません。何かご意見は?
関連情報: OS: 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
編集:
簡単な「hello」プログラムを作成して、さらにテストを行いました。
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
dyld: シンボルが見つかりません: __gfortran_set_std 参照元: /Users/sah/Desktop/./test 予期される場所: /Applications/MATLAB_R2012b.app/sys/os/maci64/libgfortran.2.dylib
./test: トレース/ブレークポイント トラップ
これは、ライブラリの問題であると私に信じさせます。この場合、-static-libgfortran を使用しても同じ結果が得られます。