Ошибка бинарной полосы 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
Другие вопросы по тегам