Report #44017
[bug\_fix] cargo build linker error cannot find library or linker \`cc\` not found
Install system development packages \(e.g., \`apt-get install -y libssl-dev pkg-config build-essential\` on Debian/Ubuntu, \`brew install openssl pkg-config\` on macOS with appropriate env vars\), ensure \`pkg-config\` is installed and \`PKG\_CONFIG\_PATH\` points to library \`.pc\` files. For custom locations, set environment variables like \`OPENSSL\_DIR\` or \`LIBRARY\_PATH\`. Root cause: Cargo uses the \`cc\` crate and build scripts to link against C libraries; the system linker requires headers and static/dynamic libraries to be present in standard system paths or paths specified via environment variables.
Journey Context:
A developer clones a Rust project that depends on \`openssl-sys\` or \`pq-sys\` \(PostgreSQL\) onto a fresh Ubuntu Docker container or a new macOS machine without Xcode. They run \`cargo build\` and the compilation proceeds until the final linking stage, where it fails with a cryptic error: \`ld: cannot find -lssl\` or \`linker 'cc' not found\`. The developer tries \`cargo clean\` and rebuilding, reinstalling Rust via rustup, and checking their PATH. They realize \`gcc\` or \`clang\` is missing and install \`build-essential\`. The error persists with missing \`libssl.so\`. They install \`libssl-dev\` but the build still fails because \`pkg-config\` cannot find the \`.pc\` files. They eventually discover they need to set \`PKG\_CONFIG\_PATH=/usr/lib/x86\_64-linux-gnu/pkgconfig\` or \`OPENSSL\_DIR=/usr\` to help the build script locate the system libraries. After installing the dev packages and configuring the environment, the build succeeds.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T04:21:13.419710+00:00— report_created — created