왜 이 라이브러리를 찾을 수 없나요?

왜 이 라이브러리를 찾을 수 없나요?

저는 이 주제에 대해 잘 모르기 때문에 다음 명령이 작동하지 않는 이유를 알 수 없습니다.

 $ 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

컴파일할 때 이런 일이 발생합니다유행성 이하선염도서관. 위의 명령은 make를 통해 실행됩니다. librefblas.a를 올바른 경로에 넣었습니다.

$ 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

질문 1:-L디렉토리 스위치 인 줄 알았는데 ld왜 여기서 파일이 직접 참조되나요? -L 매개변수에서 librefblas.a를 제거하면 "정의되지 않은 참조" 오류가 많이 발생합니다.

질문 2: -l내 기억이 맞다면 그것은 추구 .a하고 또 추구한다는 의미일 것입니다. .so제가 이 파일을 갖고 있지 않아서 그런 걸까요 .so? 를 사용하여 알아내려고 했지만 gfortran -v ...디버깅하는 데 도움이 되지 않았습니다.

답변1

@Mat님 덕분에 댓글의 도움으로 이 문제를 해결할 수 있었습니다.

openmpi 버전을 컴파일하고 싶기 때문에 mpif90대신 사용하는 것이 도움이 됩니다 gfortran. 내 시스템에서는 다음과 같습니다.

 $ mpif90 --showme
 /usr/bin/gfortran -I/usr/include -pthread -I/usr/lib/openmpi -L/usr/lib/openmpi -lmpi_f90 -lmpi_f77 -lmpi -ldl -lhwloc

관련 정보