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