2013-10-22 43 views
3

我有一个Fortran代码(pardiso_1.f),它需要编译一些库(BLAS,lapack和Pardiso库)。当我尝试编译它,我编译链接库之前,我写这条线在Linux终端:使用gfortran编译makefile中的库链接

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

和它完美的作品。

但是我必须使用makefile运行代码。我在编写makefile时很新,我不知道如何进行连接。我写了这个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) 

的错误是:

[email protected]:~/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 

回答

1

Makefile中不包含您的命令行的-L/home/behnam/Pardiso一部分。

+0

/home/behnam/PS2 /与/ home/behnam/Pardiso相同 –

+0

@behnamm:看看您的错误代码。请注意它是如何说的:'gfortran -fopenmp pardiso_1.f -o pardiso_1'并且不包含'-L/home/behnam/PS2'? –

0

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