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

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

cke_134.png

能确定的是:

代码本身无问题,其他人都能正常编译运行;

项目清缓存、重启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

17 回复

开发者您好,您在3楼回复的创建新的hello world项目也编译爆错,请问创建新工程的时候出现了跟截图相同的错误吗;如果不同,麻烦您提供下不同的编译错误的截图,以方便后续分析,感谢您的支持和配合。

更多关于HarmonyOS鸿蒙Next中编译报错(ERROR: 10311009 ArkTS: ERROR Error Message: Failed to execute es2abc.),试了很多方案都无效的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


关闭/卸载所有杀毒软件试试。

公司电脑、内网,有很多限制。 我理解应该和这个无关,因为数据安全系统很早之前就已经装好了,之前都没有问题

能不能装个虚拟机在里面测试下,感觉就是电脑环境的问题,因为之前我的被360拦截过。

我看你清缓存、重启都试过了,不行卸载重装呢。我看大佬们给了好多方法,都试过了吗楼主

目前试了多个方案,都还不行

感谢,没有我这个问题的报错案例

代码和其他人一样,那就你的环境问题了,内存分配异常。那捕获下异常吧
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

基本可以确定:

不是代码问题,

而是:

  1. 编译缓存损坏
  2. es2abc 内存异常
  3. 某个依赖/缓存文件损坏
  4. Node/环境变量/路径问题
  5. 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。

别乱降。


八、最狠但最有效的方法(我最后成功方案)

直接:

  1. 新建空工程
  2. 把 src 复制进去
  3. 不复制:
    • hvigor
    • build
    • oh_modules
    • .idea
  4. 重新 ohpm install

很多玄学问题直接没了。

因为:

项目元数据损坏

是 HarmonyOS 工程特别常见的问题。


最后补一句:

你这个错误里:

Unexpected end of MessagePack data

我非常怀疑:

hvigor/es2abc 编译缓存已经坏了

优先删:

.hvigor

很多人只删 build,其实没用。

基本上试了所有的方案都无效,创建新的hello world项目也编译爆错

创建新的hello world项目是报相同的错吗,还是别的错误

参考es2abc编译问题,检查电脑是否安装了一些自动加密软件。同时,清理一下编译产物:

hvigorw clean

ohpm cache clean

ohpm clean

再重新编译运行。

感谢,但是方案都无效

该错误表明ArkTS编译器在调用es2abc(字节码转换器)时失败。常见原因:SDK安装损坏或路径包含中文/特殊字符;项目资源文件引用异常;构建缓存冲突。请清理项目(Build > Clean Project)并重新构建,或删除.ideabuild目录后重试。确认DevEco Studio SDK面板中ArkTS相关组件完整。

该错误一般是 es2abc 编译器执行环境异常,和环境中的 C++ 运行时库缺失、文件权限或架构不匹配有关。既然代码、缓存、IDE 版本都已排除,请按以下步骤定位:

  1. 手动运行 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 等)。
  2. 确认 Node.js 架构

    node -p "process.arch"
    

    输出必须是系统和 IDE 一致的架构(比如 Mac M1 应为 arm64,Intel 为 x64)。即便版本正确,架构不匹配会直接导致 es2abc 调用失败。

  3. 临时禁用安全软件(Windows/macOS 企业管控环境常见)
    安全软件可能拦截 es2abc 二进制执行,临时退出后重试编译。

  4. 重新安装 SDK 工具链
    在 DevEco Studio 中通过 SDK Manager 卸载并重装对应 API 版本的 Toolchains,确保 es2abc 二进制完整。

绝大多数类似案例最终都落在 运行库缺失架构不匹配 上,手动执行 es2abc 能立刻看到具体原因。

回到顶部