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 250MB 的限制。
谷歌搜索在 GNU 邮件列表中找到了对 binutils 的引用,但大多数提示都是针对开发人员构建自己的代码,以及对头文件等进行更改的。我怀疑我可以在运行时进行构建配置更改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 时可能会出现问题。要下载源代码并在本地计算机上构建,请尝试:
请参阅https://pip.pypa.io/en/stable/reference/pip_install/#install-no-binary上的 pip 文档
在https://github.com/spotify/dh-virtualenv/issues/150构建 Debian 软件包的背景下讨论了这个问题
请注意,某些二进制文件可能不会使用优化标志构建,因此设置 CFLAGS 以禁用优化标志,请参阅: https ://stackoverflow.com/questions/16149613/installing-lxml-with-pip-in-virtualenv-ubuntu-12-10 -error-command-gcc-失败
另请注意,从源代码构建所有依赖项可能需要很长时间,因此如果您有时间整理哪些软件包有问题,哪些没有,并且您想加快构建速度,您可以尝试一些变体此配方仅从源代码安装一些软件包并具有不同的优化级别: