我刚刚开始使用Fortran,在使用BLAS模块时遇到了(?)在我的节目里。
我正在Ubuntu18.04上工作,我已经安装了(?)LAPACK和BLAS包通过命令sudo apt-get install libblas-dev liblapack-dev。我还从http://www.netlib.org/lapack/网站下载了LAPACK,并根据这段视频安装了它。
我的程序应该使用blas_sparse模块,所以我写了这样的东西:
program example
use blas_sparse
implicit none
! some code ...
end program example我试图用下面的命令使用example.F90编译我的代码( gfortran ):
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这里面有什么问题?我认为有三个潜在的原因:
广告。1.也许我应该在代码中添加一些名为blas_sparse的模块?此外,它只是把问题转移到另一个地方,因为我仍然需要从BLAS进口程序。不幸的是,我真的不知道use命令是如何工作的,所以我不知道我应该尝试更改什么。
广告。2.也许我的编译器不知道-llapack和-lblas库在哪里。我试着用
gfortran example.F90 -llapack -lblas -L/usr/local/lib因为在安装LAPACK和BLAS时,我创建了指向liblapack.a和liblapack.a的符号链接(参见广告)。3.)。我不知道确切的-llapack和-lblas标志是什么,这让我很难检查编译器是否能看到它们。
广告。3.我在我的计算机上安装BLAS和LAPACK时所做的是:
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我将非常感谢为解决这个问题所提供的任何帮助。
编辑:
实际上,我发现我应该使用来自.mod的blas_sparse.f90、blas_sparse_namedconstant.f90和blas_sparse_proto.h文件来创建这些blas_sparse_proto.h文件。前两个我刚刚将模块添加到我的代码中,gfortan编译器创建了正确的(我希望是) .mod文件。然而,第三种语言是用C语言编写的,所以我不能把它放在我的代码中。
现在的问题是如何将.h文件绑定到我的代码中。我需要创建一些makefile文件还是编译.h文件来创建.mod文件?
EDIT2:
看起来我只是没有从BLAST网站中安装稀疏的BLAS。我应该做的是:
wget -P target/directory/ http://www.netlib.org/toms/818mv 818 818.gz
gunzip 818.gz.sh扩展:tail -n +4 818 > 818.sh; rm 818bash 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/Makefile和INSTALL文件,并创建使用gfortran作为编译器的TESTER/Makefile.GNU文件。
毕竟,我将blas_sparse.mod文件复制到我的程序所在的目录中:
cp SOFTWARE/blas_sparse.mod blas_sparse.mod现在我可以使用gfortran编译器编译程序了:
gfortran example.F90 -llapack -lblas发布于 2018-12-13 14:35:27
你不仅仅是在使用大多数教程、问题和答案所讲的简单的通常的模糊语言。实际上,您使用的是使用模块的现代Fortran接口。
大多数编译器使用.mod文件作为模块描述,您必须告诉编译器,它将在何处为稀疏的BLAS找到这些文件。在gfortran中,您可以使用-Ipath来实现这一点,其中path是这些.mod文件的路径。它非常类似于C++中的头文件在相关问题稀疏的BLAS不包括在BLAS中吗?中的需要。
https://stackoverflow.com/questions/53762604
复制相似问题