为什么找不到这个库?

为什么找不到这个库?

我对此主题不太了解,因此无法弄清楚为什么以下命令不起作用:

 $ 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

问题一:我以为是目录-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

相关内容