makefile - 在 Linux 上的 Fortan90 中使用 Blas 和 Lapack 库
问题描述
我正在尝试在 Linux Mint 上的 Fortran90 代码中使用 Lapack 和 Blas 库。我相信我已经在以下目录中正确安装了这两个库: /usr/local/lib 当我使用 makefile 编译我的代码时,我收到错误消息:
gfortran -m64 -O3 -fdefault-real-8 -fdefault-double-8 -c MainHPC2.f90
gfortran -m64 MainHPC2.o Central2Scheme.o Central5Scheme.o
WriteDataFiles.o -o P1
MainHPC2.o: In function `MAIN__':
MainHPC2.f90:(.text+0x2b0): undefined reference to `dgesv_'
collect2: error: ld returned 1 exit status
makefile:56: recipe for target 'P1' failed
make: *** [P1] Error 1
我的 Fortran 代码只是试图调用一个测试函数:
call dgesv(nn,nrhsl,al,ldal,ipivl,xl,ldbl,infol)
我使用的makefile如下:我相信它没有正确链接到库。
FC = gfortran
FFLAGS = -m64 -O3 -fdefault-real-8 -fdefault-double-8
TARGET_ARCH =
LDFLAGS = -m64
BLIBS = -L/usr/local/lib -llapack -lblas
EXE = P1
.SUFFIXES:
.SUFFIXES: .o .f90 .plt
SRC = \
MainHPC2.f90 \
Central2Scheme.f90 \
Central5Scheme.f90 \
WriteDataFiles.f90 \
$(OBJECTS):
OBJ = ${SRC:.f90=.o}
$(EXE): $(OBJ)
$(FC) $(LDFLAGS) $(OBJ) $(LIBS) -o $(EXE)
%.o : %.f90
$(FC) $(FFLAGS) -c $<
# Define dependencies for modules
# $(OBJ): $(MOD)
clean:
rm -f *.mod *~ core
rm -f *.o
谢谢您的帮助。
亚历克斯
解决方案
解决方案 1
在您的 makefile 中,编译和链接的部分永远不会将$(BLIBS)
包含 BLAS 和 LAPACK 库的部分添加到链接过程中。
$(EXE): $(OBJ)
$(FC) $(LDFLAGS) $(OBJ) $(LIBS) $(BLIBS) -o $(EXE)
解决方案 2
或者您打错字并写BLIBS
而不是LIBS
,
LIBS = -L/usr/local/lib -llapack -lblas
注意:这应该是评论而不是答案
推荐阅读
- python - 语法错误python,不知道如何编写代码
- python - Python:继续方法调用保持,直到配置的延迟时间
- javascript - What does this _=_=>_(_);_(_) mean?
- image - 如何在 Flutter 中不使用 BackdropFilter 获得模糊效果?
- python - 使用 Keras/Tensorflow Serving 的可变长度输入
- c# - 如何为下拉菜单创建视图?
- python - 如何使用 Selenium 和 Python 定位元素并提取所需文本
- c# - 如何将新属性设置为 @Html.DropDownListFor
- typescript - vue-class-component:如何创建和初始化反射数据
- r - 尝试有条件地将字符串的子部分提取到新列中