【问题标题】:Calling Lapack DLL from gfortran从 gfortran 调用 Lapack DLL
【发布时间】:2019-09-19 18:26:32
【问题描述】:

我在 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_' 的未定义引用

【问题讨论】:

    标签: r windows fortran gfortran lapack


    【解决方案1】:

    您始终可以使用gendef 程序(作为 MinGW-w64 安装的一部分提供)检查 DLL 包含哪些函数/子例程。显然 R for Windows 安装中的“modules\x64\lapack.dll”不是您想要的库。正确的是“bin\x64\Rlapack.dll”!

    但这并不是故事的结局。至少在安装 R 3.6.1 的情况下,该库仅包含 LAPACK 例程的双精度变体。因此,我需要将您的程序转换为使用REAL*8DGESV。但后来这奏效了:

    > 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 中重现。

    【讨论】:

    • 谢谢——对我有用。将 C:\Program Files\R\R-3.6.1\bin\x64 添加到路径的另一种方法是将那里的 DLL 复制到当前工作目录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    相关资源
    最近更新 更多