gfortran使用MinGW找不到OpenMP库(omp_lib.mod)
我想编译包含OpenMP的Fortran代码。我正在复制使用来自其他代码的OpenMP。它内置一次成功昨日再下一次,我建立了它,我得到以下错误:gfortran使用MinGW找不到OpenMP库(omp_lib.mod)
../MAXBRG3D.f90:3:4:
USE OMP_LIB ! USED WITH OMP FUNCTIONS
1
Fatal Error: Can't open module file 'omp_lib.mod' for reading at (1): No such file or directory
compilation terminated.
subdir.mk:329: recipe for target 'MAXBRG3D.o' failed
make: *** [MAXBRG3D.o] Error 1
只有我的代码中注释掉无关OpenMP的功能的代码几节所做的更改。我已经删除了评论,但仍然收到相同的错误。我的编译命令如下。
gfortran -funderscoring -O0 -g -Wall -c -fmessage-length=0 -fopenmp -o "MAXBRG3D.o" "../MAXBRG3D.f90"
我看到下面的链接:gfortran can't find OpenMP library (omp_lib.mod) under MinGW 当我运行gfortran -v, --enable-libgomp
不会显示出来。
>gfortran -v
Using built-in specs.
COLLECT_GCC=gfortran
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/6.3.0/lto-wrapper.exe
Target: mingw32
Configured with: ../src/gcc-6.3.0/configure --build=x86_64-pc-linux-gnu --host=mingw32 --with-gmp=/mingw --with-mpfr=/mingw --with-mpc=/mingw --with-isl=/mingw --prefix=/mingw --disable-win32-registry --target=mingw32 --with-arch=i586 --enable-languages=c,c++,objc,obj-c++,fortran,ada --with-pkgversion='MinGW.org GCC-6.3.0-1' --enable-static --enable-shared --enable-threads --with-dwarf2 --disable-sjlj-exceptions --enable-version-specific-runtime-libs --with-libiconv-prefix=/mingw --with-libintl-prefix=/mingw --enable-libstdcxx-debug --with-tune=generic --enable-libgomp --disable-libvtv --enable-nls
Thread model: win32
gcc version 6.3.0 (MinGW.org GCC-6.3.0-1)
我能够运行以下小Fortran代码。 (\ LIB \ GCC \的mingw32 \ 6.3.0位于MinGW的)和libgomp-1.dll文件(位于MinGW的
PROGRAM TEST
INTEGER M
REAL C(3), D(3)
M=3
C(1) = 2
C(2) = 5
C(3) = 10
call A1(M,C,D)
write(*,5)D(3)
5 format(1x,'D3=',G12.5)
END PROGRAM
SUBROUTINE A1(N, A, B)
INTEGER I, N
REAL B(N), A(N)
!$OMP PARALLEL DO !I is private by default
DO I=2,N
B(I) = (A(I) + A(I-1))/2.0
ENDDO
!$OMP END PARALLEL DO
END SUBROUTINE A1
此外,我已经libgomp.a,libgomp.dll.a,libgomp.spec, \ BIN)。
我已经解决了这个问题。我注释掉了USE OMP_LIB
行,并且我刚刚初始化了我想要使用的函数。
以前我发现了初始化功能
INTEGER FUNCTION OMP_GET_THREAD_NUM()
这是不工作的例子。然而,我发现了一个不同的例子,它将函数初始化为整数。所以
INTEGER OMP_GET_THREAD_NUM
这似乎已经解决了这个问题,现在的代码被编译并运行。
在Fortran中,它是USE omp_lib,默认为.mod。正如你引用它,它会想要omp_lib.mod.mod。您可能需要将-I(大写I)设置为指向编译器的include目录。 – tim18
@ tim18这可能只是一个错字,看看错误信息。 –
使用隐式接口确实是我想到的一种可能性。这是一种解决方法,而不是一个完整的解决方案。它使你的代码变得更糟,并且会让第三方代码变得痛苦。但是,如果你足够了,那么你很好。 –
你从哪里得到你的gfortran?你使用Cygwin?什么'gfortran -v'打印? –
请尝试编译一个简单的OpenMP Hello world程序,它不使用'omp_lib'模块。请报告会发生什么。在您的计算机中是否有任何名为'libgomp *'的文件(以及其他GCC和gfortran库)? –
我在Windows上使用MinGW。我没有使用Cygwin。 –