Проблема при компоновке библиотек lapack и fftw3

У меня есть программа Fortran 90, которая использует подпрограммы lapack и успешно работает в моей системе Ubuntu. Теперь я хочу запустить его на Mac (OS X Версия 10.11.4). Я использую компилятор gfortran как часть gcc, установленного из репозиториев homebrew, и библиотеки lapack, установленной в /usr/local/lib/. Когда я пытаюсь скомпилировать мой код, я получаю следующую ошибку:

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

После некоторого поиска в Google я понял, что проблема в том, что ссылки. Когда я собираю это так, все работает хорошо:

gfortran my_prog.f90 -llapack

Также, когда используется llapack из Framework Accelerate, компилятор не жалуется.

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 ответ

FFTW не является частью механизма ускорения. Если вы хотите использовать его, вам нужно добавить -lfftw3 к вариантам компиляции.

Если библиотеки не находятся в LIBRARY_PATH по умолчанию, вам может потребоваться указать -L/path/to/fftw/libs также. То же самое касается пути включения, если вы используете его модули -I/path/to/fftw/includes,

Обратите внимание, что vDSP часть библиотеки также обеспечивает реализации FFT. Вам может не понадобиться FFTW вообще.

Другие вопросы по тегам