Skip to content

Prebuilt binary for Linux ARM is actually x86-64 #860

Description

@lydell

node-pty@1.2.0-beta.2 ships with a prebuilt binary for linux-arm64, but unfortunately it doesn’t work because it’s actually an x86-64 binary.

❯ file node_modules/node-pty/prebuilds/*/pty.node
node_modules/node-pty/prebuilds/darwin-arm64/pty.node: Mach-O 64-bit bundle arm64
node_modules/node-pty/prebuilds/darwin-x64/pty.node:   Mach-O 64-bit bundle x86_64
node_modules/node-pty/prebuilds/linux-arm64/pty.node:  ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=9e27bfed53a8a0c4bd32668732638b8d70309795, not stripped
node_modules/node-pty/prebuilds/linux-x64/pty.node:    ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=f57211b22947c87ac6934de7f75c12dd37bcec7e, not stripped
node_modules/node-pty/prebuilds/win32-arm64/pty.node:  PE32+ executable (DLL) (GUI) Aarch64, for MS Windows
node_modules/node-pty/prebuilds/win32-x64/pty.node:    PE32+ executable (DLL) (GUI) x86-64, for MS Windows

Notice how the file command recognizes that the binaries for macOS and Windows ARM actually are arm64/Aarch64 binaries. But for Linux it says that the one for arm64 is actually an x86-64 binary.

Here’s the failure:

https://github.com/lydell/node-pty-smoke-test/actions/runs/20697090233/job/59413955229

❯ node test.js
/home/runner/work/node-pty-smoke-test/node-pty-smoke-test/node_modules/node-pty/lib/utils.js:36
    throw new Error("Failed to load native module: " + name + ".node, checked: " + dirs.join(', ') + ": " + lastError);
          ^

Error: Failed to load native module: pty.node, checked: build/Release, build/Debug, prebuilds/linux-arm64: Error: Cannot find module './prebuilds/linux-arm64//pty.node'
Require stack:
- /home/runner/work/node-pty-smoke-test/node-pty-smoke-test/node_modules/node-pty/lib/utils.js
- /home/runner/work/node-pty-smoke-test/node-pty-smoke-test/node_modules/node-pty/lib/index.js
    at Object.loadNativeModule (/home/runner/work/node-pty-smoke-test/node-pty-smoke-test/node_modules/node-pty/lib/utils.js:36:11)
    at Object.<anonymous> (/home/runner/work/node-pty-smoke-test/node-pty-smoke-test/node_modules/node-pty/lib/unixTerminal.js:27:22)
    at Module._compile (node:internal/modules/cjs/loader:1761:14)
    at Object..js (node:internal/modules/cjs/loader:1893:10)
    at Module.load (node:internal/modules/cjs/loader:1481:32)
    at Module._load (node:internal/modules/cjs/loader:1300:12)
    at TracingChannel.traceSync (node:diagnostics_channel:328:14)
    at wrapModuleLoad (node:internal/modules/cjs/loader:245:24)
    at Module.require (node:internal/modules/cjs/loader:1504:12)
    at require (node:internal/modules/helpers:152:16)
  • The file does exist.
  • There’s a double slash in './prebuilds/linux-arm64//pty.node', but it works on the other platforms.
  • I tried marking the file as executable but it didn’t help.
  • The error message says “Cannot find module” but I’m pretty sure the real error is the binary format.
  • I’m not sure, but this might be fixed by: Fix linux arm compiling and add CI for cross-compiled builds #857

Activity

  1. Tyriar commented on Jan 4, 2026

    @Tyriar
    Contributor
  2. added
    bugIssue identified by VS Code Team member as probable bug
    on Jan 4, 2026
  3. added this to the milestone on Jan 4, 2026
  4. devm33 commented on Jan 4, 2026

    @devm33
    Contributor

    Should be fixed by #857

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

bugIssue identified by VS Code Team member as probable bug

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions