Compiling
為什麼 ld 找不到這個庫?
我對這個主題不是很了解,因此無法弄清楚為什麼以下命令不起作用:
$ 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
編譯mumps庫時會發生這種情況。上面的命令是由 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
是takes目錄的切換ld
,為什麼這裡直接引用文件呢?如果我從 -L 參數中刪除 librefblas.a,我會收到很多“未定義的引用”錯誤。問題 2: 如果我沒記錯的話,
-l
應該暗示尋找.a
然後尋找。.so
是我沒有.so
文件的問題嗎?我試圖通過使用找出來gfortran -v ...
,但這並沒有幫助我調試它。
我能夠在評論的幫助下解決這個問題,特別感謝@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