Skip to content

Include self-contained -L in native-static-libs#159145

Open
alyssais wants to merge 1 commit into
rust-lang:mainfrom
alyssais:native-static-libs
Open

Include self-contained -L in native-static-libs#159145
alyssais wants to merge 1 commit into
rust-lang:mainfrom
alyssais:native-static-libs

Conversation

@alyssais

Copy link
Copy Markdown
Contributor

(I suggest reviewing with whitespace ignored.)

rustc uses heuristics to determine whether the self-contained path should be on the linker search path. It's important to get these right, because if self-contained is improperly missing from the search path, linking will fail (as seen here), but if it's improperly present, a broken executable can be produced due to e.g. linking two different libcs (as seen here and here). All of this works reasonably well when rustc is doing the linking, but when linking is done externally, there's a problem: there's no way for a build tool to know whether rustc would include the self-contained path or not. Without a way to find this out from rustc, the only way for a build tool to correctly link with a staticlib produced by rustc is to exactly reimplement rustc's heuristics. Not ideal.

The existing rustc --print native-static-libs option exists to enable build tools to find out what linker flags should be used when linking a rustc-produced staticlib. Without including the argument to add the self-contained directory to the search path when necessary, though, it doesn't meet its intended purpose — build tools relying on native-static-libs will still sometimes do the wrong thing. Fixing this will make it possible for build tools to link the correct self-contained libraries when necessary, without each build tool having to match rustc's heuristics itself. This will enable fixing real problems encountered with Meson, where either self-contained libraries were not found, or self-contained libraries were incorrectly linked.

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Jul 11, 2026
@rustbot

rustbot commented Jul 11, 2026

Copy link
Copy Markdown
Collaborator

r? @TaKO8Ki

rustbot has assigned @TaKO8Ki.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: codegen, compiler
  • codegen, compiler expanded to 75 candidates
  • Random selection from 18 candidates

rustc uses heuristics to determine whether the self-contained path
should be on the linker search path.  It's important to get these
right, because if self-contained is improperly missing from the search
path, linking will fail (as seen in [1]), but if it's improperly
present, a broken executable can be produced due to e.g. linking two
different libcs (as seen in [2][3]).  All of this works reasonably
well when rustc is doing the linking, but when linking is done
externally, there's a problem: there's no way for a build tool to know
whether rustc would include the self-contained path or not.  Without a
way to find this out from rustc, the only way for a build tool to
correctly link with a staticlib produced by rustc is to exactly
reimplement rustc's heuristics.  Not ideal.

The existing rustc --print native-static-libs option exists to enable
build tools to find out what linker flags should be used when linking
a rustc-produced staticlib.  Without including the argument to add the
self-contained directory to the search path when necessary, though, it
doesn't meet its intended purpose — build tools relying on
`native-static-libs` will still sometimes do the wrong thing.  Fixing
this will make it possible for build tools to link the correct
self-contained libraries when necessary, without each build tool
having to match rustc's heuristics itself.  This will enable fixing
real problems encountered with Meson, where either self-contained
libraries were not found, or self-contained libraries were incorrectly
linked.

[1]: mesonbuild/meson#15216
[2]: https://bugs.gentoo.org/970166
[3]: https://bugs.gentoo.org/967728
@alyssais alyssais force-pushed the native-static-libs branch from 0d8d502 to 6d07079 Compare July 11, 2026 18:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants