2012-04-25 2 views
3

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

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

Спасибо!

ответ

6

Из того же 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 также, как только два свободных Fortran компиляторов, которые я знаю являются g77 и gfortran и g77 насколько я знаю, разработка довольно мертва ... Еще одна вещь, которую нужно проверить, - g77 (по умолчанию) добавляет два символа подчеркивания к символам, тогда как gfortran (по умолчанию) добавляет только один. Вероятно, это наиболее важно для numpy, чтобы знать ... хотя могут быть и другие тонкие различия (если numpy делает некоторые грязные взломы, чтобы получить информацию, хранящуюся в общем блоке, например).

+0

Спасибо! Только то, что мне нужно. Чтобы использовать 'ldd' на' lapack', я 'cd''d'/usr/lib/'и выполнил' $ ldd liblapack. * '(Мой файл lapack выглядит как' liblapack.so.3gf'). Мои [результаты] (http://pastebin.com/pgSHha9R) указывают на 'gfortran'. Еще раз спасибо за то, что вы нашли это и обменялись. – grisaitis

+0

@caravaggisto Нет проблем - я рад помочь. Если это сработало для вас, не стесняйтесь принять этот ответ (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) – mgilson

+0

конечно :) Еще раз спасибо. – grisaitis

1

Я не знаю простой способ, хотя вы можете найти 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. Issue ls и обратите внимание на каталог исходного кода.
  6. Измените в исходный каталог Lapack.
  7. Изучите файл debian/control, обратив особое внимание на соответствующую строку Build-Depends:. Это покажет, что необходимо для сборки пакета.
  8. Issue dpkg -s build-essential, который предоставит вам дополнительную информацию о компиляторах, доступных для сборки каждого пакета в вашем дистрибутиве (возможно, вам придется сначала установить пакет build-essential).

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

+0

Спасибо! 'readelf' [отлично работал] (http://pastebin.com/C4YggTfX) и подтвердил результаты с' ldd'. Другие шаги выглядят немного излишними для моих нужд, но спасибо за обмен. – grisaitis

Смежные вопросы