我编译了LAPACK和BLAS,但我的系统无法识别库

时间:2013-07-22 23:16:58

标签: linker fortran lapack blas

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

make blaslib
make

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

然后,我复制了/usr/local/lib/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个工作站测试了它并没有帮助!任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

前段时间我遇到了同样的问题!双重使用Windows和Linux以及在Windows中轻松播放选项教会了我一些有趣的东西!

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

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

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

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

希望它有所帮助。