Por que não consigo encontrar essa biblioteca?

5

Não tenho muito conhecimento sobre esse assunto e, portanto, não consigo entender por que o comando a seguir não funciona:

 $ gfortran -o dsimpletest -O  dsimpletest.o ../lib/libdmumps.a \ 
 ../lib/libmumps_common.a  -L/usr -lparmetis -lmetis -L../PORD/lib/ \
 -lpord -L/home/eiser/src/scotch_5.1.12_esmumps/lib -lptesmumps -lptscotch \
 -lptscotcherr /opt/scalapack/lib/libscalapack.a   -L/usr/lib/openmpi/ \ 
 -lmpi -L/opt/scalapack/lib/librefblas.a -lrefblas -lpthread
 /usr/bin/ld: cannot find -lrefblas
 collect2: ld returned 1 exit status

Isso acontece quando se compila a biblioteca caxumba . O comando acima é executado por make. Eu tenho o librefblas.a no caminho correto:

$ ls /opt/scalapack/lib/ -l
total 20728
-rw-r--r-- 1 root root   619584 May  3 14:56 librefblas.a
-rw-r--r-- 1 root root  9828686 May  3 14:59 libreflapack.a
-rw-r--r-- 1 root root 10113810 May  3 15:06 libscalapack.a
-rw-r--r-- 1 root root   653924 May  3 14:59 libtmg.a

Pergunta 1: Achei que a opção -L de ld leva diretórios, por que ela se refere ao arquivo diretamente aqui? Se eu remover o librefblas.a do argumento -L, recebo muitos erros de "referência indefinida".

Pergunta 2: -l deve implicar procurar .a e, em seguida, procurar .so , se bem me lembro. É um problema que eu não tenho o arquivo .so ? Tentei descobrir usando gfortran -v ... , mas isso não me ajudou a depurá-lo.

    
por Sebastian 04.05.2012 / 08:57

1 resposta

2

Consegui resolver isso com a ajuda dos comentários, crédito especial para @Mat.

Como eu queria compilar a versão openmpi, ajudou a usar mpif90 em vez de gfortran , que, no meu sistema, é

 $ mpif90 --showme
 /usr/bin/gfortran -I/usr/include -pthread -I/usr/lib/openmpi -L/usr/lib/openmpi -lmpi_f90 -lmpi_f77 -lmpi -ldl -lhwloc
    
por 04.05.2012 / 16:29