我为我的全局变量声明定义了一个模块'gvars'。当我定义
在我的gvars模块中integer :: nthreads, max_threads, tid, omp_get_max_threads, omp_get_num_threads, omp_get_thread_num
,我的主例程中的调用maxthreads = omp_get_max_threads()
在编译时给出了以下错误:
maxthreads = omp_get_max_threads()
1
Error: Unclassifiable statement at (1)
但是当我在我的主程序中包含上面的integer ::
定义时,它编译得很好并且给了我想要的结果。如果我甚至在我的gvars模块中定义nthreads = -1
,我能够在我的主程序中打印出正确的值,所以我知道它被正确包含和定义,这只是因为某种原因我不能将它作为openmp函数的返回值。
为什么会这样?
有没有其他方法可以将这些值保存为全局变量,并且仍然在我的主例程中而不是模块中定义它们?
如果重要,我正在使用gfortran编译
答案 0 :(得分:1)
问题不在于maxthreads
的声明,而是在omp_get_max_threads
的同一行上的声明。正如haraldkl所示,您需要use omp_lib
来自动访问这些函数的声明。
(如果由于某种原因你真的不想这样做,你也可以将语句external :: omp_get_max_threads, ...
添加到模块中。)
答案 1 :(得分:0)
不是真正的答案,但我不知道如何将代码放在这里。遗憾...
module gvars
integer :: maxthreads
end module gvars
program test
use gvars
use omp_lib
implicit none
maxthreads = omp_get_max_threads()
end program test
编译: gfortran -fopenmp test.f90
gfotran -v给出的地方: gcc版本4.4.5(GCC)