我正在尝试运行一个包含函数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库。
1条答案
按热度按时间i86rm4rw1#
令人惊讶的是,我不能很快找到一个复制品。但是答案隐藏在Lapack undefined reference的注解中,从那里引用“如果你链接静态库,链接器将删除任何在链中没有被引用的名称”和“默认情况下,GNU链接器只按顺序对库进行一次传递。您可以使用
--start-group
“请求多次传递。把这个放在一起解决了这个特殊的情况,作为一个一般的经验法则,把所有你想链接的库放在链接行的末尾。
虽然我在这里注意到大多数Linux自带的lapack和lapack库没有优化-如果你安装并链接到openblas,你可能会得到更好的性能-请参阅here在Ubuntu上的安装。然后,您可以简单地链接到
-lopenblas
。英特尔的mkl是另一个经过优化的选择。