You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Alpine Linux 3.12构建Elixir、BEAM符号缺失报错问题咨询

故障根因

这两个报错本质就是基础依赖版本过旧、版本不匹配导致的,和构建脚本的业务逻辑无关,两个缺失符号的具体诱因:

  • _ZSt28__throw_bad_array_new_lengthv 符号缺失:该符号是GCC 11及以上版本libstdc导出的标准库符号,Alpine 3.12默认搭载的GCC版本为9.x,自带的libstdc没有实现这个符号。如果构建时混用了高版本GCC编译的C++依赖,或者直接拿高版本环境预编译好的ERTS二进制包放到3.12环境跑,就会触发这个重定位错误。
  • pthread_getname_np 符号缺失:这个pthread扩展接口是musl libc 1.2.0之后才正式加入的,Alpine 3.12默认带的musl版本是1.1.24,根本没实现这个接口,运行时自然找不到对应符号。
修复方案
  • 最稳妥无坑的方案:直接把构建/运行环境的Alpine版本升到3.14及以上。高版本Alpine自带的musl、libstdc++版本完全满足ERTS 12.3.2.1的依赖要求,不需要额外折腾依赖就能正常构建运行。
  • 如果因为业务要求必须锁死Alpine 3.12版本:
    1. 手动把musl升级到1.2.x版本、gcc/libstdc++升级到11及以上版本。注意3.12官方默认源没有这两个高版本包,手动升级时要做好兼容测试,避免搞坏系统其他基础组件
    2. 不要用任何外部预编译的BEAM/ERTS二进制,必须在当前3.12环境下从源码完整编译整套Erlang/OTP组件,编译时强制链接系统自带的低版本标准库,不要混进高版本环境编译出来的动态/静态库。

多阶段构建场景要特别注意:构建阶段和最终运行阶段的Alpine大版本必须保持一致,高版本编译、低版本运行必然会出现这类符号找不到的重定位错误。

内容的提问来源于stack exchange,提问作者William Ross

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 17:30:46