从 gfortran 调用 Lapack DLL
Calling Lapack DLL from gfortran
我在 Windows 上安装了 R,它创建了一个文件 C:\programs\R\R-3.5.2\modules\x64\lapack.dll 。用于构建 R 的 Fortran 编译器是 gfortran。如何从 gfortran 调用 Lapack 例程?我试过了
gfortran C:\programs\R\R-3.5.2\modules\x64\lapack.dll xlin.f
其中 xlin.f 是 driver 并得到错误消息
C:...\ccwsB76i.o:xlin.f:(.text+0x120): 未定义对`sgesv_'的引用
您始终可以使用 gendef 程序(作为 MinGW-w64 安装的一部分提供)检查 functions/subroutines DLL 包含的内容。显然 R for Windows 安装中的 "modules\x64\lapack.dll" 不是您想要的库。正确的是 "bin\x64\Rlapack.dll"!
但这并不是故事的结局。至少在安装 R 3.6.1 的情况下,该库仅包含 LAPACK 例程的双精度变体。因此,我需要将您的程序转换为使用 REAL*8
和 DGESV
。但后来这奏效了:
> set "PATH=C:\Program Files\R\R-3.6.1\bin\x64;%PATH%"
> set "PATH=C:\msys64\mingw64\bin;%PATH%"
> gfortran xlin.f "C:\Program Files\R\R-3.6.1\bin\x64\Rlapack.dll"
> a.exe
1.0000000597179521
1.0000000618499254
1.0000000465843075
我能够使用默认的 LAPACK 库在 Linux 中重现。
我在 Windows 上安装了 R,它创建了一个文件 C:\programs\R\R-3.5.2\modules\x64\lapack.dll 。用于构建 R 的 Fortran 编译器是 gfortran。如何从 gfortran 调用 Lapack 例程?我试过了
gfortran C:\programs\R\R-3.5.2\modules\x64\lapack.dll xlin.f
其中 xlin.f 是 driver 并得到错误消息
C:...\ccwsB76i.o:xlin.f:(.text+0x120): 未定义对`sgesv_'的引用
您始终可以使用 gendef 程序(作为 MinGW-w64 安装的一部分提供)检查 functions/subroutines DLL 包含的内容。显然 R for Windows 安装中的 "modules\x64\lapack.dll" 不是您想要的库。正确的是 "bin\x64\Rlapack.dll"!
但这并不是故事的结局。至少在安装 R 3.6.1 的情况下,该库仅包含 LAPACK 例程的双精度变体。因此,我需要将您的程序转换为使用 REAL*8
和 DGESV
。但后来这奏效了:
> set "PATH=C:\Program Files\R\R-3.6.1\bin\x64;%PATH%"
> set "PATH=C:\msys64\mingw64\bin;%PATH%"
> gfortran xlin.f "C:\Program Files\R\R-3.6.1\bin\x64\Rlapack.dll"
> a.exe
1.0000000597179521
1.0000000618499254
1.0000000465843075
我能够使用默认的 LAPACK 库在 Linux 中重现。