Seb*_*ian 5 compiling make libraries linker static-linking
我对这个主题不是很了解,因此无法弄清楚为什么以下命令不起作用:
$ 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
Run Code Online (Sandbox Code Playgroud)
编译腮腺炎库时会发生这种情况。上述命令由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
Run Code Online (Sandbox Code Playgroud)
问题一:我以为-L
是ld
takes目录的切换,为什么这里直接引用文件?如果我从 -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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7404 次 |
最近记录: |