我在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不一起工作,这是我可以通过其他方式解决的问题吗?