0

我正在开发一个混合使用 Fortran 90 和 Fortran 77 编写的项目,现在需要在 Linux 环境中将来自 netlib.org 的 LAPACK/BLAS 库链接到项目。OPTS = -O2 -fPIC -m64我在给定中使用了 gfortran 编译器标志Makefile,然后使用

make blaslib
make

它正常完成,或者至少我是这么认为的。

然后,我将文件复制到/usr/local/liband中/usr/local/bin//usr/local/lib64/ 但它没有用。我什至使用了该选项-L/path/to/lapack/liblapack.a,但它也不起作用。

当我编译我的代码时,我收到以下错误:

qrB.o: In function `qrfactorizeb_':
qrB.f90:(.text+0x64f): undefined reference to `zgeqp3_'
collect2: ld returned 1 exit status
make: *** [run] Error 1

我真的不确定该怎么做这个错误。我在其他 3 个工作站上对其进行了测试,但没有帮助!谁能帮我?

4

1 回答 1

1

前段时间我也有同样的问题!Windows 和 Linux 的双重工作以及在 Windows 中轻松使用选项教会了我一些有趣的事情!

尝试编译,例如: [...]$ ifort liblapack.a libblas.a libslatec.a *.o -o profmm

如您所知,这意味着我想使用 3 个库来编译我的文件并将其链接到 profmm 输出文件中。它没有语法错误,但会导致很多错误,例如: preconditioner3.o: In function factorb_': preconditioner3.f:(.text+0x1add): undefined reference tozgetrf_' 。. preconditioner.o: 在函数factorpre_': preconditioner.f:(.text+0x13a2): undefined reference tozgetrf_' preconditioner.f:(.text+0x18bb): 未定义引用zgetri_' zbesh.o: In functionzbesh_': zbesh.f:(.text+0xb3): 未定义引用d1mach_' zbesh.f:(.text+0xcf): undefined reference toi1mach_' 。. . 还有更多错误表明 ifort 无法读取我的库,即使它们位于我的当前目录中!

但只需将命令更改如下: [...]$ ifort *.o liblapack.a libblas.a libslatec.a -o profmm

它工作正常,没有错误!所以这意味着现在 ifort 可以读取我的库(本地库)!另请注意,更改库的顺序非常重要,这取决于程序中这些子例程的使用顺序。所以总是尝试重新排序库链以检查可能的错误。

希望能帮助到你。

于 2013-07-26T20:13:58.107 回答