Определите, какой компилятор построил мой LAPACK

Я хочу установить новейшую версию numpy (числовая библиотека для Python), а версия (v1.6.1) пока отсутствует в репозиториях Ubuntu Oneiric. Когда я решил установить его вручную, я прочитал в файле INSTALL, что numpy должен быть собран с тем же компилятором, который построил LAPACK (библиотека Фортрана, используемая numpy). К сожалению, я не знаю, какой это компилятор. Я не установил LAPACK себя - apt-get сделал, назад, когда я установил более старый numpy (v1.5.1) с помощью apt, Если бы мне пришлось угадывать, я бы сказал, gfortran, но я бы предпочел не испортить это.

Как выяснить, какой компилятор создал мою текущую установку LAPACK? Есть ли какой-нибудь простой способ - возможно, запустить какой-нибудь код Fortran, который его использует, и проверить вывод?

Спасибо!

2 ответа

Решение

Из того же INSTALL файл, на который вы ссылались...

How to check the ABI of blas/lapack/atlas
-----------------------------------------

One relatively simple and reliable way to check for the compiler used to build
a library is to use ldd on the library. If libg2c.so is a dependency, this
means that g77 has been used. If libgfortran.so is a a dependency, gfortran has
been used. If both are dependencies, this means both have been used, which is
almost always a very bad idea.

Если бы мне пришлось угадывать, я бы, вероятно, предположил, что gfortran также является единственным из двух бесплатных компиляторов фортрана, о которых я знаю, это g77 и gfortran, и разработка g77, насколько я знаю, практически мертва... Еще одна вещь, которую нужно проверить, это g77 (по по умолчанию) добавляет два символа подчеркивания к символам, тогда как gfortran (по умолчанию) добавляет только одно. Вероятно, это то, что наиболее важно знать numpy... хотя могут быть и другие тонкие различия (например, если numpy делает какой-то грязный взлом, чтобы получить информацию, хранящуюся в общем блоке, например).

Я не знаю простого пути, хотя вы можете найти readelf -a /usr/lib/$SHARED_OBJECT освещая, где $SHARED_OBJECT это что-то вроде /usr/lib/atlas-base/liblapack_atlas.so.3gf.0 (вам придется заглянуть в ваш /usr/lib чтобы увидеть, каково ваше точное имя файла).

Однако есть другой, совершенно другой способ получения информации, так как вы используете Ubuntu, разновидность Debian.

  1. Узнайте, к какому бинарному пакету $BINARY_PKG принадлежит ваш общий объект Lapack dpkg -l | grep -E '(lapack|atlas) и / или dpkg -S $SHARED_OBJECT,
  2. Узнайте, из какого исходного пакета $SOURCE_PKG был создан двоичный пакет $BINARY_PKG dpkg -s $BINARY_PACKAGE, В выходных ищите Source: линия.
  3. Перейдите во временный рабочий каталог.
  4. вопрос apt-get source $SOURCE_PKG, (С другой стороны, apt-get source $BINARY_PKG имеет тот же эффект.)
  5. вопрос ls и обратите внимание на исходный каталог Lapack.
  6. Перейдите в исходный каталог Lapack.
  7. Изучите файл debian/controlуделяя особое внимание соответствующим Build-Depends: линия. Это скажет, что было необходимо для сборки пакета.
  8. вопрос dpkg -s build-essential, которая даст вам дополнительную информацию о компиляторах, доступных для сборки каждого пакета в вашем дистрибутиве (возможно, вам придется установить build-essential пакет, во-первых).

Все это, конечно, большая работа, и ни одна из них не в природе простой формулы, которая просто дает вам ответ, который вы ищете; но это дает вам места, чтобы искать ответ. Удачи.

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