首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用BLAS (LAPACK)模块编译Fortran代码

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

Stack Overflow用户
提问于 2018-12-13 13:08:43
回答 1查看 3.9K关注 0票数 4

我刚刚开始使用Fortran,在使用BLAS模块时遇到了(?)在我的节目里。

我正在Ubuntu18.04上工作,我已经安装了(?)LAPACK和BLAS包通过命令sudo apt-get install libblas-dev liblapack-dev。我还从http://www.netlib.org/lapack/网站下载了LAPACK,并根据这段视频安装了它。

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

代码语言:javascript
复制
program example

use blas_sparse

implicit none

    ! some code ...

end program example

我试图用下面的命令使用example.F90编译我的代码( gfortran ):

代码语言:javascript
复制
gfortran example.F90 -llapack -lblas

就像这个例子视频上一样(1:11)。但是它不能工作,编译器返回:

代码语言:javascript
复制
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。

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

广告。2.也许我的编译器不知道-llapack-lblas库在哪里。我试着用

代码语言:javascript
复制
gfortran example.F90 -llapack -lblas -L/usr/local/lib

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

广告。3.我在我的计算机上安装BLAS和LAPACK时所做的是:

  • 从netlib.org/lapack网站下载LAPACK 3.8.0
  • 使用以下命令解压缩库并在我的计算机上安装文件
代码语言:javascript
复制
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安装

代码语言:javascript
复制
sudo apt-get install libblas-dev liblapack-dev

我将非常感谢为解决这个问题所提供的任何帮助。

编辑:

实际上,我发现我应该使用来自.modblas_sparse.f90blas_sparse_namedconstant.f90blas_sparse_proto.h文件来创建这些blas_sparse_proto.h文件。前两个我刚刚将模块添加到我的代码中,gfortan编译器创建了正确的(我希望是) .mod文件。然而,第三种语言是用C语言编写的,所以我不能把它放在我的代码中。

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

EDIT2:

看起来我只是没有从BLAST网站中安装稀疏的BLAS。我应该做的是:

  • 下载图书馆:
代码语言:javascript
复制
wget -P target/directory/ http://www.netlib.org/toms/818
  • 解压文件:
代码语言:javascript
复制
mv 818 818.gz
gunzip 818.gz
  • 删除前三行并执行.sh扩展:
代码语言:javascript
复制
tail -n +4 818 > 818.sh; rm 818
  • 安装库:
代码语言:javascript
复制
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

在最后一步中,我还需要做的是编辑SOFTWARE/MakefileINSTALL文件,并创建使用gfortran作为编译器的TESTER/Makefile.GNU文件。

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

代码语言:javascript
复制
cp SOFTWARE/blas_sparse.mod blas_sparse.mod

现在我可以使用gfortran编译器编译程序了:

代码语言:javascript
复制
gfortran example.F90 -llapack -lblas
EN

回答 1

Stack Overflow用户

发布于 2018-12-13 14:35:27

你不仅仅是在使用大多数教程、问题和答案所讲的简单的通常的模糊语言。实际上,您使用的是使用模块的现代Fortran接口。

大多数编译器使用.mod文件作为模块描述,您必须告诉编译器,它将在何处为稀疏的BLAS找到这些文件。在gfortran中,您可以使用-Ipath来实现这一点,其中path是这些.mod文件的路径。它非常类似于C++中的头文件在相关问题稀疏的BLAS不包括在BLAS中吗?中的需要。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53762604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档