Ubuntu 使用BLAS(LAPACK)模块编译Fortran代码
我刚开始使用Fortran,在程序中使用(?)LAPACK中的BLAS模块时遇到问题 我正在Ubuntu 18.04上工作,我已经通过命令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 !
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
这里有什么问题?我认为有三个潜在的原因:
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
- 使用以下命令提取库并在我的计算机上安装文件
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