使用 gfortran 的生成文件中的库链接



我有一个fortran代码(pardiso_1.f),它需要一些库(BLAS,lapack和Pardiso库)来编译。当我尝试编译它时,我在编译之前链接库,并在 linux 终端中编写以下行:

gfortran pardiso_1.f  -L/home/behnam/Pardiso -lpardiso412-GNU450-X86-64 -L/usr/lib -lblas -llapack -fopenmp

它工作得很好。

但是,我必须使用生成文件运行代码。我在编写makefile方面很新,我不知道如何进行链接。我已经写了这个制作文件。谁能帮我找出问题所在?

FC = gfortran
OPT = -O2
PROGRAMS = pardiso_1
all: $(PROGRAMS)
FFLAGS = -fopenmp
#### BLAS, LAPACK and PTHREAD libraries
LBLAS = /usr/lib/
###location of pardiso file
LIBMKL = /home/behnam/PS2/
#### Series of libraries
LIBRARIES= -llapack -lblas -lpthread -lm -lpardiso412-GNU430-X86-64
PATHFC = /usr/bin/
nlace: ${PATHFC}${FC} ${OPT} ${FFLAGS} -I${PROGRAMS} -o nlace.exe 
         -L${LIBMKL} -lpardiso412-GNU430-X86-64
         -L${LBLAS} ${LIBRARIES}

clean:
    rm -f *.o *.exe fort.* *~ *.mod
veryclean: clean
    rm -f *~ $(PROGRAMS)

错误是:

behnam@meen-392430:~/testing$ make
make: Warning: File `Makefile' has modification time 23 s in the future
gfortran -fopenmp   pardiso_1.f   -o pardiso_1
/tmp/ccYNexaH.o: In function `MAIN__':
pardiso_1.f:(.text+0xb3): undefined reference to `pardisoinit_'
pardiso_1.f:(.text+0x2ae): undefined reference to `pardiso_chkmatrix_'
pardiso_1.f:(.text+0x36e): undefined reference to `pardiso_chkvec_'
pardiso_1.f:(.text+0x44c): undefined reference to `pardiso_printstats_'
pardiso_1.f:(.text+0x5ae): undefined reference to `pardiso_'
pardiso_1.f:(.text+0x860): undefined reference to `pardiso_'
pardiso_1.f:(.text+0xb78): undefined reference to `pardiso_'
pardiso_1.f:(.text+0xe00): undefined reference to `pardiso_'
collect2: ld returned 1 exit status
make: *** [pardiso_1] Error 1

生成文件不包含命令行的-L/home/behnam/Pardiso部分。

您的PROGRAMS规则不包含包含库调用的配方。 我假设你想要类似你的nlace规则的东西,但现在,make 不会调用任何-L开关作为其操作的一部分。

最新更新