связывание проблемы лапака

Я пытаюсь скомпилировать программу, использующую lapack.

Сначала я установил lapack, установив все пакеты с помощью «sudo apt-get install» по этой ссылке: https://launchpad.net/ubuntu/precise/+source/lapack

Я пытаюсь скомпилировать код на этой странице: http://www.nag.com/lapack-ex/examples/source/dgbsv-ex.f

Я получил эту программу с: http://www.nag.com/lapack-ex/lapack-ex.html

Я попытался скомпилировать программу, набрав

$gfortran dbgsv-ex.f -llapack -lblas

в терминал

Я получаю кучу сообщений об ошибках, все формы

/usr/lib/gcc/i686-linux-gnu/4.6/../../../../lib/liblapack.so: undefined reference to         
`ATL_strsv'

т. е. сообщения об ошибках заканчиваются на ATL_xxxx. Обратите также внимание, что когда я смотрю в свой /usr/lib/, я вижу файл с именем liblapack.so


person db1234    schedule 18.05.2012    source источник
comment
Похоже, ваша библиотека LAPACK построена на ATLAS. Проверьте, установлен ли ATLAS, и добавьте ссылку на -latlas или ссылку напрямую на -llapack_atlas.   -  person Hristo Iliev    schedule 19.05.2012
comment
Я установил atlas, набрав sudo apt-get install libatlas-dev libatlas-doc libatlas-test libatlas-base-dev libatlas3gf-base libatlas-cpp-0.6-dev libatlas-cpp-0.6-1 libatlas-cpp-0.6-1-dbg Затем попытался скомпилировать, как и раньше, и получил те же сообщения об ошибках, затем я попытался скомпилировать, набрав gfortran dbgsv-ex.f -L/usr/local/lib -llapack -lblas -latlas, и получил сообщение об ошибке /usr/bin/ld: cannot find -latlas. На случай, если порядок имел значение, я даже попытался поставить -latlas перед -lblas или перед -llapack. Я получил ту же ошибку с -llapack_atlas   -  person db1234    schedule 19.05.2012
comment
Похоже, это какая-то старая ошибка в пакетах Debian/Ubuntu. Вы можете прочитать больше здесь.   -  person Hristo Iliev    schedule 19.05.2012
comment
Я пытался изменить альтернативы, используя sudo update-alternatives --config libblas.so.3gf и аналогично для lapack, но это все еще не работало. Есть ли способ заставить lapack работать?   -  person db1234    schedule 19.05.2012
comment
Я бы посоветовал вам удалить все пакеты, связанные с BLAS и LAPACK, и переустановить ATLAS.   -  person Hristo Iliev    schedule 19.05.2012
comment
Если я это сделаю, мне не нужно будет переустанавливать BLAS или LAPACK?   -  person db1234    schedule 19.05.2012
comment
ATLAS обеспечивает полную реализацию BLAS и множество подпрограмм LAPACK. Возможно, этого будет достаточно для ваших нужд.   -  person Hristo Iliev    schedule 19.05.2012
comment
Что ж... потребовалось некоторое время, чтобы удалить все BLAS и LAPACK (не уверен, был ли это я или Ubuntu, но он загружался со скоростью около 2000 бит/с!). Когда я устанавливаю ATLAS, какие компоненты я должен установить, то есть -dev, 3gf-base, -base-dev и т. д.   -  person db1234    schedule 19.05.2012
comment
libatlas-dev и libatlas-base-dev точно. Затем libatlas3gf-base предоставляет базовую версию ATLAS, которая скомпилирована без каких-либо аппаратных оптимизаций. Ubuntu предлагает вам создать собственную версию, оптимизированную для вашего конкретного процессора.   -  person Hristo Iliev    schedule 19.05.2012
comment
Я удалил все BLAS, LAPACK и переустановил ATLAS. Это также заняло некоторое время со скоростью около 10 КБ / с, и я даже переехал в новое место с лучшим интернетом. Я не строил свою версию. Также кажется, что BLAS и LAPACK были установлены в процессе в соответствии с тем, что, по словам программного центра Ubuntu, установлено на моем ноутбуке. У меня все еще та же проблема. С ссылкой, которую вы разместили об альтернативном способе настройки библиотек, есть ли какой-то один, который я должен выбрать?   -  person db1234    schedule 19.05.2012
comment
К сожалению, в данный момент у меня нет доступа к машине с Linux, и мой список гипотез закончился. Я бы сделал dpkg -L ..., чтобы увидеть содержимое каждого пакета libatlas. Вероятно, должны быть предоставлены некоторые дополнительные пути к библиотекам.   -  person Hristo Iliev    schedule 20.05.2012
comment
На самом деле, я не пытался перенастраивать LAPACK или BLAS после того, как удалил потом и переустановил ATLAS. Я перенастроил BLAS, и теперь он компилируется и работает!... ну вроде.. Оригинальная программа не запускается, я получаю одно маленькое сообщение undefined reference to x04cef вместо сотен сообщений, но эта программа ( physics.orst.edu/~rubin/nacphy/lapack/codes/linear-f. html ) изначально имел точно такие же сообщения об ошибках до перенастройки BLAS, но скомпилировался и запустился после перенастройки BLAS. Спасибо за вашу помощь!   -  person db1234    schedule 20.05.2012
comment
X04CEF является частью библиотеки NAG Fortran. . Вы не найдете его в среде выполнения gfortran, и вам придется заменить его другим кодом, который печатает матрицу.   -  person Hristo Iliev    schedule 20.05.2012
comment
Бессовестный плагин: в зависимости от того, что вы пытаетесь построить, EasyBuild может помочь. Это решает многие проблемы со ссылками на BLAS/LAPACK/ATLAS. См. hpcugent.github.com/easybuild. (отказ от ответственности: я разработчик EasyBuild)   -  person Kenneth Hoste    schedule 22.11.2012


Ответы (1)


Как уже указано в других комментариях, ваша система имеет реализацию LAPACK в ATLAS. Правильный порядок связывания библиотек (для версии ATLAS без потоков) будет следующим:

-llapack -lf77blas -lcblas -latlas

Также обратите внимание, что ваш код Fortran, по-видимому, также содержит подпрограмму из библиотеки NAG (x04cef), поэтому вам также придется связать библиотеку NAG.

person Bálint Aradi    schedule 04.02.2013