Armadillo C ++ матричная библиотека - как включить использование ATLAS или LAPACK? - PullRequest
1 голос
/ 25 марта 2012

Когда я компилирую example2.cpp с помощью make-файла armadillo и запускаю его, я получаю сообщение об ошибке

error: det(): use of ATLAS or LAPACK needs to be enabled

Как мне это исправить? У меня есть похожие ошибки, когда я пытаюсь использовать решить. Детали моей настройки:

  • Ubuntu Lucid Lynx 10.04
  • Версия Armadillo: 2.4.2 (Loco Lounge Lizard)
  • ATLAS 3.9.51
  • BOOST 1.48.0
  • g ++ (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3

Атлас был установлен раньше, чем был броненосец, установка броненосца была настроена с помощью Cmake. Я далеко не эксперт в cmake, но я подумал, что он должен был найти ATLAS, когда я сгенерировал с ним make-файлы. Документация Armadillo, кажется, говорит, что, если я установлю с помощью cmake, мне не нужно будет делать какие-либо ручные включения ATLAS. Я попытался вручную взломать example2.cpp, вставив

#define ARMA_USE_ATLAS

перед заголовками, но он просто генерирует кучу ошибок, касающихся отсутствующих вещей в Cblas. Возможно, отсутствует шаг, позволяющий cmake найти ATLAS. Такое ощущение, что мне не хватает чего-то простого, но ключевого. Любая помощь будет принята с благодарностью.

Дополнительная информация:

Редактировать: по какой-либо причине я больше не могу добавлять комментарии, поэтому я публикую ответ на ответ @ Appleman1234 ниже здесь.

Я скомпилировал броненосец и ATLAS из источника. Я думал, что ATLAS имеет LAPACK и BLAS в комплекте и оптимизированы. Когда я его скомпилировал, я передал местоположение в tar-файл lapack вроде

./configure --shared --with-netlib-lapack-tarfile=/<path>/lapack-3.3.1.tgz

Я также вижу в каталоге atlas lib следующие файлы:

libatlas.a, libcblas.a, libf77blas.a, liblapack.a, libptcblas.a, libptf77blas.a libsatlas.so, libtatlas.so

, который указывает на то, что в системе установлены blas, cblas и lapack. Тем не менее, CMakeCache.txt в броненосце, кажется, указывает, что cmake не нашел BLAS, CBLAS, CLAPACK следующим образом

BLAS_LIBRARY:FILEPATH=BLAS_LIBRARY-NOTFOUND

В CMakeCache.txt нет понятия ATLAS, поэтому я предполагаю, что он также не был найден. Может быть, я ошибаюсь, но, похоже, мне как-то нужно указать cmake на ATLAS, я просто не знаю как. Я также мог ошибаться, предполагая, что ATLAS имеет BLAS, LAPACK и CBLAS. Я думал, что скомпилировал их как часть ATLAS, но могу ошибаться. Буду признателен за ваши комментарии.

Решение проблемы:

То, что предложил Дирк, почти сработало. Проблема, о которой я упоминал в одном из ответов на его пост, заключалась в том, что cmake противился. Я неправильно диагностировал это, поскольку проблема с cmake не находила clapack. Фактически, после более тщательного изучения вывода cmake, я понял, что у него возникли проблемы с тем, что он не нашел хорошего компилятора или, скорее, затянул ноги, когда решил использовать компилятор / usr / bin / c ++. Так что я сделал CXX = g ++, а затем снова cmake, который работал нормально. После этого броненосец составлен нормально.

Ответы [ 2 ]

3 голосов
/ 25 марта 2012

Вы устанавливали броненосец из источника?

Что выдает cmake при работе cmake . или ./configure?

Последний просто звонит cmake ..

Выводил ли он значения ниже?

-- CLAPACK_FOUND  = YES
-- CBLAS_FOUND    = YES

Если они не YES, то, согласно CMakeLists.txt, ARMA_USE_ATLAS имеет значение false и ATLAS не используется.

Чтобы использовать det или solve, установите CLAPACK и CBLAS, если вы хотите использовать ATLAS, или просто установите LAPACK.

1 голос
/ 25 марта 2012

Поскольку armadillo существует в Debian / Ubuntu, вы можете просто установить все известные зависимости сборки, чтобы убедиться, что у вас есть все необходимые пакеты -dev:

edd@max:~$ sudo apt-get build-dep armadillo
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
edd@max:~$ 

Похоже, что моя система завершена в этом отношении.

...