#2185·hermes

`static_h`: 采样分析器没有构建开关,因此没有 POSIX 信号传递的目标必须为它无法运行的仪器生成 `sigaction`、`sigemptyset`、`pthread_kill` 的代码段

作者: altween创建于 2026年9月17日更新于 2026年9月17日

为什么这对交叉编译很重要? 我们正在将 `hermesvm_a` 移植到一个 AArch64 POSIX 类似的嵌入式目标,其 libc 声明了 `<signal.h>`,但其应用程序运行时并不提供任何 POSIX 信号。因此,`hermesvm_a` 链接了三个未定义的符号 - **`sigaction`、`sigemptyset` 和 `pthread_kill`** - 它们都来自 `SamplingProfilerPosix.cpp`,因为该仪器无法在该目标上工作,而且嵌入中没有任何要求。没有开关,唯一获得干净链接的方法是编写三个Stub,以让链接器不提及任何不需要的功能 - 而Stub 是一个比不编译代码更糟糕的答案,因为返回 `-1` 的 `sigaction` 会使 `SamplingProfiler` 存在且损坏,而不是不存在。"该平台没有采样分析器"是构建知道的事实,而头文件无法猜测。在 5cee10a 中为该目标交叉构建 `hermesvm_a` 时,关闭分析器会删除 **149 个构建边**,将档案从 **17,557,286 字节减少到 17,395,084 字节 - −162,202 字节。

内容来源: facebook/hermes