链接lapack和fftw3库时出现问题

时间:2016-03-29 18:36:38

标签: macos fortran static-linking lapack fftw

我有一个Fortran 90程序,它使用lapack子程序,并且在我的Ubuntu系统上成功运行。现在我想在Mac上运行它(OS X版本10.11.4)。我正在使用gfortran编译器作为gcc的一部分,从homebrew存储库安装,以及安装在/ usr / local / lib /中的lapack库。 当我尝试编译代码时,出现以下错误:

gfortran my_prog.f90 -L/usr/local/lib/ -llapack
Undefined symbols for architecture x86_64:
  "_daxpy_", referenced from:
      _zggbal_ in liblapack.a(zggbal.o)
...     
  "_ztrmv_", referenced from:
      _zlarft_ in liblapack.a(zlarft.o)
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status

经过一些谷歌搜索我明白问题是因为链接。当我像这样编译它时,一切运行良好:

gfortran my_prog.f90 -llapack

当使用框架加速的llapack时,编译器也不会抱怨。

gfortran my_prog.f90 -framework accelerate

库是x86-64架构:

lipo -info *.a
input file libfftw3.a is not a fat file
input file liblapack.a is not a fat file
Non-fat file: libfftw3.a is architecture: x86_64
Non-fat file: liblapack.a is architecture: x86_64

LAPACK不是唯一一个给我一个错误的,后来FFTW3出现同样的问题。你能否给我一个提示解决这个问题的方法?

1 个答案:

答案 0 :(得分:0)

FFTW不属于accelerate framework。如果要使用它,还需要将-lfftw3添加到编译选项中。

如果库不在默认的LIBRARY_PATH中,您可能还需要指定-L/path/to/fftw/libs。如果您使用其模块-I/path/to/fftw/includes,则包含路径也是如此。

请注意,该库的vDSP部分还提供了FFT implementations。您可能根本不需要FFTW。