我在fortran中使用openmp,在程序完成很多工作之前,它通过简单地尝试写入如下所示的一行而遇到了段错误:
783 module Lines
784
785 character*80 eline, dline
786
787 contains
788
789 subroutine InitializeLines
790 print*, 'writing to eline'
791 write(eline,'(1x,79(''#''))')
792 print*, 'writing to dline'
793 write(dline,'(1x,79(''-''))')
794 end subroutine InitializeLines
795
796 end module Lines
在主程序中,当我尝试调用时,它只是在给我一个段错误之前InitializeLines
打印出来。writing to eline
现在,当我在没有-fopenmp
. 另请注意,本节中只有一个线程处于活动状态(a 只是get_num_threads()
表明我InitializeLines
只使用一个线程进入)。我一起飞-fopenmp
,就没有段错误并且程序正确执行。
另请注意-DUSEOPENMP
,当我想使用 openmp 时,我的 makefile 中有一个标志。如果我没有定义,那么将不会发生 openmp 操作。这很重要,因为当我不 使用编译时,-DUSEOPENMP
我会遇到相同的段错误问题,即使我 100% 确定我什至没有调用任何额外的线程或使用 openmp 的任何部分。 -fopenmp
现在,经过一番尝试,我发现当我取出-static
作为编译选项时,这个问题就消失了。我的问题是——为什么?为什么会这样-static
并且-fopenmp
不一起工作,这是我可以通过其他方式解决的问题吗?