2016-07-10 3 views
1

В качестве вспомогательного макияжа файла (с именем arch.make), который содержит некоторые библиотеки, я написалMakefile ищет файл библиотеки

FFLAGS=-g -O2 
FPPFLAGS= -DMPI -DFC_HAVE_FLUSH -DFC_HAVE_ABORT 
LDFLAGS=-L/export/apps/computer/lapack-3.2 

LAPACK_LIBS=-llapack_LINUX 
LIBS=$(LAPACK_LIBS) 

Затем Makefile содержит

siesta: check-siesta what version $(MPI_INTERFACE) $(FDF) $(WXML) $(XMLPARSER) \ 
      $(COMP_LIBS) $(ALL_OBJS) 
    $(FC) -o siesta \ 
      $(LDFLAGS) $(ALL_OBJS) $(FDF) $(WXML) $(XMLPARSER) $(MPI_INTERFACE)\ 
      $(COMP_LIBS) $(FoX_LIBS) $(LIBS) 

Других переменных в порядке. Обратите внимание: $(LIBS) и $(LDFLAGS), которые определены в arch.make.

Это файл библиотеки действительно существует согласно

[email protected]:ObjPar# ls /export/apps/computer/lapack-3.2/lapack_LINUX.a -l 
-rw-r--r-- 1 root root 18296682 Jul 10 20:50 /export/apps/computer/lapack-3.2/lapack_LINUX.a 

Однако делает процесс выходит из-за ошибки

...... 
dc_lapack.a `FoX/FoX-config --libs --wcml` -llapack_LINUX -lblas 
/usr/bin/ld: cannot find -llapack_LINUX 
collect2: ld returned 1 exit status 

Есть много линий до этого, но я пропущенной их.

Что мне делать?

+1

Когда вы указываете '-lxyz', компоновщик ищет' libxyz.a' или 'libxyz.so'. Когда у вас 'xyz' написано' lapack_LINUX', компоновщик даже не пытается найти файл, который вы говорите, содержит библиотеку. –

ответ

3

Линкер не находит файл с именем liblapack_LINUX.a или liblapack_LINUX.so. Вам нужно будет указать на файл непосредственно с

LAPACK_LIBS=/export/apps/computer/lapack-3.2/lapack_LINUX.a 

Переменная LDFLAGS может быть удалена.

Возможно, вам понадобится связать библиотеку BLAS таким образом, если библиотека не называется libblas.a или libblas.so. Порядок ссылок также может быть важен. BLAS перед LAPACK.

+0

Да, я попробую BLAS позже. Вещь, которую я хочу знать, заключается в том, почему она не ищет путь, который задает LDFLAGS? – mahmood

+0

@mahmood Это так, но сама библиотека имеет неправильное имя. Когда вы используете '-lmylib', компоновщик ищет' libmylib.a' и 'libmylib.so', а не' mylib.a' или 'mylib.so'. – Kusalananda

Смежные вопросы