stablyai/orca · error
[verify-linux-glibc-floor] objdump not found. Install binuti
Error message
[verify-linux-glibc-floor] objdump not found. Install binutils on the Linux packaging host so the glibc-floor gate can inspect bundled native binaries.
What it means
verifyLinuxGlibcFloor collected one or more native binaries under rootDir but resolveObjdump() could not find an objdump binary on PATH (or via options.objdumpPath). The gate refuses to skip: a missing objdump on exactly the Linux packaging host where it matters would let a glibc-regression slip through, so it fails loudly instructing the user to install binutils. This only fires when there is something to inspect; an empty binary list short-circuits OK.
Source
Thrown at config/scripts/verify-linux-glibc-floor.cjs:324
/**
* Fail Linux packaging if any bundled native binary under `rootDir` requires a
* glibc/libstdc++ symbol version newer than the floor OS. No-op is not allowed
* on Linux: a missing objdump throws, because a silent skip would defeat the
* regression gate on exactly the host where it matters.
*/
function verifyLinuxGlibcFloor(rootDir, options = {}) {
const binaries = collectNativeBinaries(rootDir)
if (binaries.length === 0) {
console.log(`[verify-linux-glibc-floor] OK — no bundled native binaries under ${rootDir}`)
return
}
// Why: resolve objdump only once there is something to inspect, so a fixture
// with no ELF binaries does not fail on a host that lacks binutils.
const objdumpPath = resolveObjdump(options.objdumpPath)
if (!objdumpPath) {
throw new Error(
'[verify-linux-glibc-floor] objdump not found. Install binutils on the Linux ' +
'packaging host so the glibc-floor gate can inspect bundled native binaries.'
)
}
const offenders = []
for (const filePath of binaries) {
const { versionNeeds, neededLibraries } = readDynamicInfo(filePath, objdumpPath)
const floorViolations = findFloorViolations(versionNeeds, filePath)
// Only pay for `objdump -T` when a relocated-symbol provider is not already
// in DT_NEEDED (the common, healthy case short-circuits without it).
const providerViolations = Object.values(RELOCATED_SYMBOL_PROVIDERS).some(
(library) => !neededLibraries.has(library)
)
? findMissingProviderDeps(readImportedSymbols(filePath, objdumpPath), neededLibraries)
: []
if (floorViolations.length > 0 || providerViolations.length > 0) {
offenders.push({ filePath, floorViolations, providerViolations })View on GitHub (pinned to 1136503c6a)
Solutions
- Install binutils on the packaging host: Debian/Ubuntu `apt-get install -y binutils`, Fedora `dnf install -y binutils`, Alpine `apk add --no-cache binutils`.
- If installing is impossible, pass a valid options.objdumpPath pointing at an existing objdump binary.
- Do NOT work around it by skipping the gate — that defeats the regression protection.
Example fix
# before # (slim runner, no binutils) node config/scripts/verify-linux-glibc-floor.cjs out/linux-unpacked # after apt-get update && apt-get install -y binutils node config/scripts/verify-linux-glibc-floor.cjs out/linux-unpacked
Defensive patterns
Strategy: validation
Validate before calling
import { execFileSync } from 'node:child_process'
function hasObjdump(): boolean {
try { execFileSync('which', ['objdump'], { stdio: 'ignore' }); return true } catch { return false }
}
if (!hasObjdump()) {
console.error('Install binutils before running the glibc-floor gate.')
process.exit(1)
} Prevention
- Add `binutils` to the base package list of every Linux packaging/CI image.
- Do not disable or skip the gate when objdump is missing — install it.
When it happens
Trigger: collectNativeBinaries(rootDir).length > 0 AND resolveObjdump(options.objdumpPath) returns falsy at line 322-323. Reproduced by running the gate in a minimal container/runner image without binutils installed, or with options.objdumpPath pointing at a nonexistent path.
Common situations: A slimmed CI Docker image (e.g. node:alpine or a distroless variant) lacking binutils; a custom runner where objdump was removed; passing a wrong options.objdumpPath.
Related errors
- [verify-linux-glibc-floor] could not run objdump on ${filePa
- [verify-linux-glibc-floor] objdump ${flag} failed for ${file
- [verify-linux-glibc-floor] ${offenders.length} bundled nativ
- Missing packaged resources directory: ${resourcesDir}
- Unsupported local-build compatibility architecture: ${contex
AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12).
Data as JSON: /api/errors/0c32bd54985123ff.
Report an issue: GitHub.