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

Ubuntu 使用BLAS(LAPACK)模块编译Fortran代码,ubuntu,fortran,gfortran,lapack,blas,Ubuntu,Fortran,Gfortran,Lapack,Blas,我刚开始使用Fortran,在程序中使用(?)LAPACK中的BLAS模块时遇到问题 我正在Ubuntu 18.04上工作,我已经通过命令sudo-apt-get-install-libblas-dev-liblapack-dev安装了(?)LAPACK和BLAS包。我还从网站下载了LAPACK,并根据安装程序进行安装 我的程序应该使用blas_sparse模块,所以我写了这样的东西: program example use blas_sparse implicit none !

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

我正在Ubuntu 18.04上工作,我已经通过命令
sudo-apt-get-install-libblas-dev-liblapack-dev
安装了(?)LAPACK和BLAS包。我还从网站下载了LAPACK,并根据安装程序进行安装

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

program example

use blas_sparse

implicit none

    ! some code ...

end program example
我正在尝试使用
gfortran
和以下命令编译代码(
example.F90
):

gfortran example.F90 -llapack -lblas
像是在(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
这里有什么问题?我认为有三个潜在的原因:

  • 代码是错误的
  • 我用来编译的命令不正确
  • LAPACK和BLAS没有真正安装
  • 公元1年。 也许我应该在代码中添加一些名为
    blas\u sparse
    的模块?此外,它只是将问题转移到另一个地方,因为我仍然需要以某种方式从BLAS导入程序。不幸的是,我真的不知道
    如何使用
    命令,所以我不知道应该尝试更改什么

    公元2年。 也许我的编译器不知道
    -llapack
    -lblas
    库在哪里。我试图使用

    gfortran example.F90 -llapack -lblas -L/usr/local/lib
    
    comand,因为在安装LAPACK和BLAS时,我已经创建了指向
    liblapack.a
    liblapack.a
    (见广告3.)的符号链接。我不知道什么是确切的
    -llapack
    -lblas
    标志,这使我很难检查编译器是否“能看到”它们

    公元3年。 我在我的计算机上安装BLAS和LAPACK所做的是:

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

    并通过apt get安装它:

    sudo apt-get install libblas-dev liblapack-dev
    
    我将非常感谢为解决这个问题所提供的任何帮助

    编辑:

    实际上,我发现我应该使用
    blas\u sparse.f90
    blas\u sparse\u namedconstant.f90
    blas\u sparse\u proto.h
    文件创建这些
    .mod
    文件。我刚刚在代码中添加了前两个模块,gfortan编译器创建了适当的(我希望)
    .mod
    文件。然而,第三个是用C语言编写的,所以我不能把它放在我的代码中

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

    编辑2:

    看起来只是我没有从服务器上安装稀疏BLAS。我应该做的是:

    • 下载图书馆:
    • 解压缩文件:
    • 删除前三行和扩展名
      .sh
    • 安装库:
    在最后一步中,我还需要编辑
    SOFTWARE/Makefile
    INSTALL
    文件,并创建
    TESTER/Makefile.GNU
    文件以将
    gfortran
    用作编译器

    毕竟,我将
    blas_sparse.mod
    文件复制到我的程序所在的目录中:

    cp SOFTWARE/blas_sparse.mod blas_sparse.mod
    
    现在我可以使用
    gfortran
    编译器编译程序:

    gfortran example.F90 -llapack -lblas
    

    你不仅仅是在使用大多数教程、问答中提到的简单的BLAS。实际上,您使用的是使用模块的现代Fortran接口


    大多数编译器使用.mod文件来描述模块,您必须告诉编译器在哪里可以找到这些文件。在gfortran中,您可以使用
    -Ipath
    执行此操作,其中
    path
    是指向这些.mod文件的路径。它与类似的问题

    中的C++头文件的需求非常相似,但在我的计算机上没有这样的文件。它们是在编译我的程序时创建的。正如我意识到的那样,我应该准备来自模块的文件,并包括来自模块的文件。我现在的问题是,我不知道如何使用C编写的include文件(
    blas\u sparse\u proto.h
    )创建
    .mod
    文件。不,Fortran编译器不能使用包含C代码的.h文件。如果您的库同时支持Fortran和C,它将有单独的头文件或mod文件。@MaciejK.mod文件是由编译器在安装库时创建的。
    mv 818 818.gz
    gunzip 818.gz
    
    tail -n +4 818 > 818.sh; rm 818
    
    bash 818.sh
    # before doing the following step read the notes below
    bash INSTALL # this file has been created by 818.sh
    ./TESTER/test_all # running test
    
    cp SOFTWARE/blas_sparse.mod blas_sparse.mod
    
    gfortran example.F90 -llapack -lblas