使用BLAS(LAPACK)模块编译Fortran代码

时间:2018-12-13 13:08:43

标签: ubuntu fortran gfortran lapack blas

我刚开始使用Fortran,并且在程序中使用来自(?)LAPACK的BLAS模块时遇到问题。

我正在使用Ubuntu 18.04,我已经通过命令sudo apt-get install libblas-dev liblapack-dev安装了(?)LAPACK和BLAS软件包。我还从http://www.netlib.org/lapack/网站下载了LAPACK,并根据this video进行了安装。

我的程序应该使用blas_sparse模块,所以我写了这样的东西:

program example

use blas_sparse

implicit none

    ! some code ...

end program example

我正在尝试通过以下命令使用example.F90来编译代码(gfortran):

gfortran example.F90 -llapack -lblas

类似于this example video(1:11)。但是,它不起作用,编译器将返回:

example.F90:3:8:

 use blas_sparse
    1
Fatal Error: Can't open module file ‘blas_sparse.mod’ for reading at (1): No such file or directory

这是什么问题?我看到三个潜在的原因:

  1. 代码错误。
  2. 我用来编译的命令不正确。
  3. 未真正安装LAPACK和BLAS。

ad。 1。 也许我应该在代码中添加一些名为blas_sparse的模块?此外,它只是将问题转移到另一个地方,因为我仍然需要以某种方式从BLAS导入程序。不幸的是,我真的不知道use命令如何工作,所以我不知道我应该尝试改变什么。

ad。 2。 也许我的编译器只是不知道-llapack-lblas库在哪里。我试图使用

明确地编写它
gfortran example.F90 -llapack -lblas -L/usr/local/lib

命令,因为在安装LAPACK和BLAS时,我已经创建了指向liblapack.aliblapack.a的符号链接(请参见广告3)。我不知道确切的-llapack-lblas标志是什么,这使我很难检查编译器是否可以“看到”它们。

ad。 3。 我在计算机上安装BLAS和LAPACK的操作是:

  • 从netlib.org/lapack网站下载LAPACK 3.8.0
  • 使用以下命令提取库并将文件安装在我的计算机上

tar zxvf lapack-3.8.0.tar.gz
cd lapack-3.8.0/
cp make.inc.example make.inc
make blaslib
make lapacklib
sudo ln -s /home/Download/lapack-3.8.0/liblapack.a /usr/local/lib/liblapack.a
sudo ln -s /home/Download/lapack-3.8.0/librefblas.a /usr/local/lib/librefblas.a

并通过apt-get安装它:

sudo apt-get install libblas-dev liblapack-dev

非常感谢您为解决此问题提供的帮助。

编辑:

我实际上发现我应该使用BLAST website中的.modblas_sparse.f90blas_sparse_namedconstant.f90文件来创建这些blas_sparse_proto.h文件。我刚刚将它们中的前两个作为模块添加到我的代码中,并且gfortan编译器会创建正确的(我希望).mod文件。但是,第三个是用C语言编写的,所以我不能仅仅将其放入代码中。

所以现在的问题是如何用我的代码绑定.h文件。我需要创建一些makefile还是编译.h文件来创建.mod文件吗?

EDIT2:

看来我只是没有从BLAST website ...安装稀疏BLAS ...

1 个答案:

答案 0 :(得分:1)

您不仅在使用大多数教程,问题和答案所谈到的简单的常规BLAS。您实际上是通过模块使用现代的Fortran界面。

大多数编译器使用.mod文件作为模块描述,您必须告诉编译器它将在何处为稀疏BLAS找到这些文件。在gfortran中,您可以使用-Ipath进行操作,其中path是这些.mod文件的路径。这与相关问题Is sparse BLAS not included in BLAS?

中C ++中头文件的需求非常相似