HarmonyOS鸿蒙Next中编译报错(ERROR: 10311009 ArkTS: ERROR Error Message: Failed to execute es2abc.),试了很多方案都无效
HarmonyOS鸿蒙Next中编译报错(ERROR: 10311009 ArkTS: ERROR Error Message: Failed to execute es2abc.),试了很多方案都无效 具体的报错信息如下:

能确定的是:
代码本身无问题,其他人都能正常编译运行;
项目清缓存、重启IDE、换其他版本的IDE均无效;
node版本是18.20.1,本质上也没有问题,有AI方案说只能设置16的版本,这是在胡扯…
官方文档关于这个报错的说明也基本都是废话,解决不了任何问题:
https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-ets-loader
https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-es2abc
有谁真实遇到过这个问题,麻烦解答一下。
更多关于HarmonyOS鸿蒙Next中编译报错(ERROR: 10311009 ArkTS: ERROR Error Message: Failed to execute es2abc.),试了很多方案都无效的实战教程也可以访问 https://www.itying.com/category-93-b0.html
开发者您好,您在3楼回复的创建新的hello world项目也编译爆错,请问创建新工程的时候出现了跟截图相同的错误吗;如果不同,麻烦您提供下不同的编译错误的截图,以方便后续分析,感谢您的支持和配合。
更多关于HarmonyOS鸿蒙Next中编译报错(ERROR: 10311009 ArkTS: ERROR Error Message: Failed to execute es2abc.),试了很多方案都无效的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
关闭/卸载所有杀毒软件试试。
公司电脑、内网,有很多限制。 我理解应该和这个无关,因为数据安全系统很早之前就已经装好了,之前都没有问题
能不能装个虚拟机在里面测试下,感觉就是电脑环境的问题,因为之前我的被360拦截过。
我看你清缓存、重启都试过了,不行卸载重装呢。我看大佬们给了好多方法,都试过了吗楼主
目前试了多个方案,都还不行
这个试了吗?《e2abc常见问题定位》
感谢,没有我这个问题的报错案例
代码和其他人一样,那就你的环境问题了,内存分配异常。那捕获下异常吧
C/C++ main里:
int main() {
try {
//你的代码
} catch (const std::bad_alloc& e) {
std::cerr << "内存分配失败: " << e.what() << std::endl;
}
return 0;
}
创建一个新项目运行下。没问题的话就把项目拷进来。
如果有问题的话,就卸载重装吧,卸载的时候记得勾选删除旧版本。并且电脑的登录用户也必须是管理员账户
这个报错核心其实不是 ArkTS 代码错误,而是 es2abc 进程在编译阶段崩了。
你这个日志里最关键的是:
Error Message: libc++abi: terminating due to uncaught exception of type std::bad_alloc
本质含义:
es2abc 内存分配失败(bad_alloc)
再结合前面的:
read cache file failed Unexpected end of MessagePack data
基本可以确定:
不是代码问题,
而是:
- 编译缓存损坏
- es2abc 内存异常
- 某个依赖/缓存文件损坏
- Node/环境变量/路径问题
- IDE 某版本 bug
你这种“别人能编译,你不能”,99%是本机环境问题。
我自己遇到过最有效的方案是下面几个。
一、先删真正的缓存(很多人没删干净)
不仅仅删 build。
把这些全删:
项目目录/.hvigor
项目目录/build
项目目录/entry/build
项目目录/.idea
用户目录/.hvigor
用户目录/.ohpm
用户目录/.npm
Mac:
rm -rf ~/.hvigor
rm -rf ~/.ohpm
rm -rf ~/.npm
Windows:
C:\Users\你的用户名\.hvigor
C:\Users\你的用户名\.ohpm
C:\Users\你的用户名\.npm
然后:
ohpm install
重新编译。
很多时候直接恢复。
二、重点检查内存问题(这个很像)
std::bad_alloc
真的是:
内存申请失败
尤其:
- 大项目
- AI项目
- 含大量 npm 包
- 使用图库
- 使用 protobuf
- 使用 cloud sdk
- 使用 wasm
特别容易炸。
解决方案:
提高 Node 内存:
Mac/Linux:
export NODE_OPTIONS=--max_old_space_size=8192
Windows:
set NODE_OPTIONS=--max_old_space_size=8192
然后重新开 IDE。
8GB 不够就:
12288
16384
我见过 32GB 内存机器都炸。
因为 es2abc 会瞬间吃爆。
三、不要放中文路径
这个是真坑。
包括:
/桌面/
/下载/
/鸿蒙项目/
全部不要。
改成:
D:\Projects\xxx
或者:
~/workspace/xxx
很多 es2abc 崩溃本质是路径编码问题。
尤其:
空格
中文
特殊字符
四、检查 npm 包是否损坏
尤其你最近还在搞:
- 云函数
- node sdk
- npm install
这个很像依赖树炸了。
直接:
rm -rf oh_modules
rm -rf node_modules
重新:
ohpm install
如果用了 npm:
npm install
五、关闭 ArkTS 增量编译缓存
这个非常关键。
有些版本 DevEco 的增量缓存会坏。
在:
File -> Settings -> Build
关闭:
Incremental Compilation
或者:
Use daemon compilation
不同版本名字不一样。
然后:
Clean Project
Rebuild Project
六、确认不是某个超大对象导致
虽然代码逻辑没错。
但:
const huge = {
...
}
或者:
import giant.json
也可能导致 es2abc 崩。
尤其:
- 超大 JSON
- base64
- AI embedding
- wasm 二进制
- protobuf 生成文件
都可能触发。
七、Node 18 没问题
你说得对。
HarmonyOS NEXT 现在:
Node 18 LTS
本来就是官方支持的。
网上很多:
必须 Node16
属于古早版本经验。
现在不少 SDK 反而要求 18。
别乱降。
八、最狠但最有效的方法(我最后成功方案)
直接:
- 新建空工程
- 把 src 复制进去
- 不复制:
- hvigor
- build
- oh_modules
- .idea
- 重新 ohpm install
很多玄学问题直接没了。
因为:
项目元数据损坏
是 HarmonyOS 工程特别常见的问题。
最后补一句:
你这个错误里:
Unexpected end of MessagePack data
我非常怀疑:
hvigor/es2abc 编译缓存已经坏了
优先删:
.hvigor
很多人只删 build,其实没用。
基本上试了所有的方案都无效,创建新的hello world项目也编译爆错
创建新的hello world项目是报相同的错吗,还是别的错误
感谢,但是方案都无效
该错误表明ArkTS编译器在调用es2abc(字节码转换器)时失败。常见原因:SDK安装损坏或路径包含中文/特殊字符;项目资源文件引用异常;构建缓存冲突。请清理项目(Build > Clean Project)并重新构建,或删除.idea、build目录后重试。确认DevEco Studio SDK面板中ArkTS相关组件完整。
该错误一般是 es2abc 编译器执行环境异常,和环境中的 C++ 运行时库缺失、文件权限或架构不匹配有关。既然代码、缓存、IDE 版本都已排除,请按以下步骤定位:
-
手动运行 es2abc
进入 HarmonyOS SDK 目录(通常在Sdk/toolchains下),执行:./es2abc --version观察是否直接报错,比如:
cannot execute binary file: Exec format error→ 架构不匹配(如 ARM64 与 x64 混用),确认你的系统和 Node.js/IDE 都是同一架构。error while loading shared libraries: ...→ 缺少依赖,按提示安装对应库(如 Linux 缺libc++.so,Windows 缺VCRUNTIME140.dll等)。
-
确认 Node.js 架构
node -p "process.arch"输出必须是系统和 IDE 一致的架构(比如 Mac M1 应为
arm64,Intel 为x64)。即便版本正确,架构不匹配会直接导致 es2abc 调用失败。 -
临时禁用安全软件(Windows/macOS 企业管控环境常见)
安全软件可能拦截 es2abc 二进制执行,临时退出后重试编译。 -
重新安装 SDK 工具链
在 DevEco Studio 中通过 SDK Manager 卸载并重装对应 API 版本的 Toolchains,确保 es2abc 二进制完整。
绝大多数类似案例最终都落在 运行库缺失 或 架构不匹配 上,手动执行 es2abc 能立刻看到具体原因。

