我在从 Matlab 中执行的 fortran 应用程序的输出中遇到一些问题。我们使用 Matlab 调用许多 fortran 应用程序并显示输出和结果。
我在 OSX 上使用 gfortran 来构建其中一个程序,它会输出大量文件并输出少量到 stdout 以跟踪进度。stdout 输出主要通过 print * 语句完成,但我也尝试过 write( * , * )。该程序使用 OpenMP,但在 OpenMP 并行部分中没有执行任何 print * 或 write( * , * ) 语句。从终端执行程序时一切正常。但是,当从 matlab 中执行程序时,stdout 没有输出。文件输出工作正常。
此外,相同的代码在使用 Intel 的 ifort 编译时,在 matlab 中显示其输出没有问题。不幸的是,我无法定期访问英特尔编译器。
我很肯定输出将输出到标准输出(不是标准错误),我已经尝试从代码中刷新两者(调用flush(6)和调用flush(0)),但这似乎并没有区别。
我不确定是什么原因造成的。有什么想法吗?
一些相关信息:操作系统:OSX 10.6.8(64位模式)
Matlab: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 预期于:/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 会产生相同的结果。