Назад | Перейти на главную страницу

Ошибка двоичной полосы linux при использовании pip install: недостаточно места для заголовков программ, попробуйте связать с -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 ...

Некоторые пакеты pip (или их зависимости) загружают двоичные файлы вместо загрузки источников и сборки на локальном компьютере, и могут возникнуть проблемы при запуске strip на двоичном файле, созданном в другой среде. Чтобы скачать исходники и построить на локальном компьютере, попробуйте:

CFLAGS='-O0' pip install --no-binary :all: PACKAGE

См. Документацию по pip на https://pip.pypa.io/en/stable/reference/pip_install/#install-no-binary

Эта проблема обсуждалась в контексте сборки пакетов 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