linux “undefined reference to `dgesvx_'"(未定义对`dgesvx_'的引用),尽管已安装并定位LAPACK

yrdbyhpb  于 12个月前  发布在  Linux
关注(0)|答案(1)|浏览(103)

我正在尝试运行一个包含函数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。
我安装了多个库,其中有lapack和lapack,当我编译它定位lapack库。

i86rm4rw

i86rm4rw1#

令人惊讶的是,我不能很快找到一个复制品。但是答案隐藏在Lapack undefined reference的注解中,从那里引用“如果你链接静态库,链接器将删除任何在链中没有被引用的名称”和“默认情况下,GNU链接器只按顺序对库进行一次传递。您可以使用--start-group“请求多次传递。把这个放在一起

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

解决了这个特殊的情况,作为一个一般的经验法则,把所有你想链接的库放在链接行的末尾。
虽然我在这里注意到大多数Linux自带的lapack和lapack库没有优化-如果你安装并链接到openblas,你可能会得到更好的性能-请参阅here在Ubuntu上的安装。然后,您可以简单地链接到-lopenblas。英特尔的mkl是另一个经过优化的选择。

相关问题