gpt4 book ai didi

node.js - Gulp/Node : error while loading shared libraries: cannot allocate memory in static TLS block

转载 作者:太空宇宙 更新时间:2023-11-03 23:24:46 27 4
gpt4 key购买 nike

尝试运行 gulp 并获取此输出

$ gulp
node: error while loading shared libraries: cannot allocate memory in static TLS block

根据我的发现,这似乎与 gcc 或 g++ 有关,不确定它与 node 或 gulp 有何关系。不管怎样,我似乎不能再喝下去了。还应该提到的是,这只是今天突然出现的。昨天运行良好。

编辑:似乎它适用于所有 Node 命令。刚刚尝试运行 npm -v 来获取版本号,它具有相同的输出。与 Node -v相同

运行 CentOS 6.9

最佳答案

GNU 工具链支持各种 TLS,其中一种(initial-exec 模型)涉及本质上与线程控制 block 的固定偏移量。在程序启动时,动态链接器计算所有偏移量并确保所有线程都有足够的空间来容纳所有所需的线程局部变量。

但是,对于dlopen,这通常不起作用,因为不可能移动线程控制 block 来为更多线程局部变量腾出空间。当前的 glibc 动态链接器有一个启发式方法,为将来的 dlopen 调用保留一些空间,但如果加载多个共享对象,每个对象都会废弃自己的线程局部变量,这是不够的。

通常的解决方法是使用LD_DEBUG=files环境变量(或strace)来查找使用dlopen加载的相关共享对象(不幸的是,您引用的错误消息没有提供此信息)。之后,您可以使用LD_PRELOAD环境变量告诉动态链接器提前加载它们。 (对于 dlopened 的共享对象执行此操作就足够了,它的依赖项会自动处理。)这有一个副作用,即程序启动时的计算会考虑其 TLS 需求,并且当稍后在运行时发生 dlopen 调用时,无需分配额外的 TLS 变量。但是,这种方法并不适用于所有共享对象,因为它会影响符号查找和 ELF 构造函数的运行顺序。

在一般情况下,可能需要将一些共享对象切换到全局动态 TLS 模型(这需要重新编译它们),或者使用具有增加的 TLS 保留的 glibc 构建。不幸的是,当前无法在运行时设置保留。

关于node.js - Gulp/Node : error while loading shared libraries: cannot allocate memory in static TLS block,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45640573/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com