“未定义对‘dgesvx_’的引用”,尽管 LAPACK 已安装并定位

问题描述 投票:0回答:1

我正在尝试运行一个包含函数 dgesvx() 的 Fortran 脚本。我运行脚本为

gfortran -lblas -llapack -o cft numtype.o cfapprox.o cftest.o

输出是

gfortran -lblas -llapack -o cft numtype.o cfapprox.o cftest.o   /usr/bin/ld: cfapprox.o: in function 
__taylor_cf_approx_MOD_pade_coef': cfapprox.f90:(.text+0x3c4): 对
dgesvx_' collect2: error: ld returned 1 exit status make: *** [Makefile:18: cft] Error 1

的未定义引用

我在 WSL 上运行 Ubuntu。

我安装了多个包含 blas 和 lapack 的库,当我编译时,它找到了 lapack 库。

linux fortran gfortran lapack
1个回答
0
投票

令人惊讶的是,我无法快速找到与此相同的副本。但答案隐藏在对Lapack未定义引用的注释中引用“如果您链接静态库,链接器将删除到目前为止链中尚未引用的任何名称”和“默认情况下, GNU 链接器仅按顺序对库进行一次传递。您可以使用“

--start-group
”请求多次传递。把这个放在一起

gfortran cfapprox.o cftest.o -o cft -llapack -lblas

解决了这种特殊情况,并且作为一般经验法则,将要链接的所有库放在链接线的end处。

虽然我在这里注意到大多数 Linux 附带的 lapack 和 blas 库都没有优化 - 如果您安装并链接到 openblas,您可能会获得更好的性能 - 有关 Ubuntu 上的安装,请参阅 here。然后您可以简单地链接到

-lopenblas
。英特尔的 mkl 是另一种优化的替代方案。

© www.soinside.com 2019 - 2024. All rights reserved.