我正在开发一个以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个工作站测试了它并没有帮助!任何人都可以帮助我吗?
答案 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可以读取我的库(本地库)!另请注意,更改库的顺序非常重要,它取决于程序内部子程序的使用顺序。因此,请始终尝试重新排序库链以检查可能的错误。
希望它有所帮助。