Ошибка бинарной полосы linux при установке pip: недостаточно места для заголовков программы, попробуйте связать с -N
Когда используешь strip
в некоторых объектных файлах в Amazon Linux это приводит к ошибкам:
$ sudo strip dfitpack.so
BFD: st6qqyd2: Not enough room for program headers, try linking with -N
strip:st6qqyd2[.note.gnu.build-id]: Bad value
Объектные файлы создаются pip install
, пакеты, включающие NumPy, Sklearn, Pandas, XGBoost, Numexpr. То, что мы пытаемся сделать, это сократить код и объектные файлы, чтобы они соответствовали пределу AWS Lambda 250 МБ.
Поиск в Google находит ссылки на binutils в списках рассылки GNU, но большинство советов предназначено для разработчиков, создающих собственный код, и для внесения изменений в заголовочные файлы и тому подобное. Я подозреваю, что есть изменение конфигурации сборки, которое я могу сделать при запуске pip install
и я надеюсь, что кто-то с лучшим пониманием binutils может помочь.
Технические характеристики:
$ uname -a
Linux ... 4.4.5-15.26.amzn1.x86_64 #1 SMP Wed Mar 16 17:15:34 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
$ yum info binutils
...
Version : 2.23.52.0.1
Release : 55.65.amzn1
...
1 ответ
Некоторые pip-пакеты (или их зависимости) загружают двоичные файлы вместо загрузки исходных текстов и сборки на локальном компьютере, и могут возникнуть проблемы при запуске strip в двоичном файле, построенном в другой среде. Чтобы скачать исходники и собрать на локальном компьютере, попробуйте:
CFLAGS='-O0' pip install --no-binary :all: PACKAGE
См. Документацию по pip по адресу https://pip.pypa.io/en/stable/reference/pip_install/.
Обсуждалась эта проблема в контексте сборки пакетов Debian на https://github.com/spotify/dh-virtualenv/issues/150
Обратите внимание, что некоторые двоичные файлы могут не создаваться с флагами оптимизации, поэтому настройку CFLAGS для отключения флагов оптимизации см. По адресу: https://stackoverflow.com/questions/16149613/installing-lxml-with-pip-in-virtualenv-ubuntu-12-10-error-command-gcc-failed
Также обратите внимание, что сборка всех зависимостей из источника может занять много времени, поэтому, если у вас есть время разобраться, какие пакеты имеют проблемы, а какие нет, и вы хотите ускорить сборку, вы можете попробовать некоторые варианты этот рецепт для установки только некоторых пакетов из исходного кода с различными уровнями оптимизации:
CFLAGS='-O0' pip install --no-binary :all: PACKAGE
pip install --no-binary :all: PACKAGE
pip install PACKAGE