Я только начал использовать Fortran и у меня возникла проблема с использованием модулей BLAS из (?) LAPACK в моей программе.
Я работаю в Ubuntu 18.04, я уже установил (?)Пакеты LAPACK и BLAS по команде sudo apt-get install libblas-dev liblapack-dev
.Я также скачал LAPACK с сайта http://www.netlib.org/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
В чем здесь проблема?Я вижу три возможные причины:
- Код неверный.
- Команда, которую я использую для компиляции, неверна.
- LAPACK и BLAS на самом деле не установлены.
объявление.1. Может быть, мне стоит добавить модуль с именем blas_sparse
в мой код?Более того, это просто перемещает проблему в другое место, потому что мне все еще нужно каким-то образом импортировать процедуры из BLAS.К сожалению, я действительно не знаю, как работает команда use
, поэтому я не знаю, что мне следует изменить.
ad.2. Может быть, мой компилятор просто не знает, где находятся библиотеки -llapack
и -lblas
.Я пытался написать это явно, используя команду
gfortran example.F90 -llapack -lblas -L/usr/local/lib
, потому что при установке LAPACK и BLAS я создал символические ссылки на liblapack.a
и liblapack.a
(см. П. 3.).Я не знаю, что такое флаги -llapack
и -lblas
, и мне сложно проверить, «компилятор» их «видит».
ad.3. Чтобы установить BLAS и LAPACK на свой компьютер, я сделал следующее:
- загрузив LAPACK 3.8.0 с веб-сайта netlib.org/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
файлы из Сайт BLAST .Первые два из них я только что добавил в свой код как модули, и компилятор gfortan создает правильные (я надеюсь) файлы .mod
.Однако третий написан на языке Си, поэтому я не могу просто вставить его в свой код.
Так что теперь вопрос в том, как связать файл .h
с моим кодом.Нужно ли создавать какой-либо makefile
или компилировать .h
файл для создания .mod
файла?
EDIT2:
Похоже, я просто не установил разреженный BLAS из Сайт BLAST ...