d445e1ccaa
When a library (L1) is passed to the linker multiple times, this is sometimes purposeful: there might be several other libraries in the linker command (L2 and L3) that all depend on L1. You'd end up with a (simplified) linker command that looks like: -l2 -l1 -l3 -l1 With the previous behavior, when rustc encountered a redundant library, it would keep the first instance, and remove the later ones, resulting in: -l2 -l1 -l3 This can cause a linker error, because on some platforms (e.g. Linux), the linker will only include symbols from L1 that are needed *at the point it's referenced in the command line*. So if L3 depends on additional symbols from L1, which aren't needed by L2, the linker won't know to include them, and you'll end up with "undefined symbols" errors. A better behavior is to keep the *last* instance of the library: -l2 -l3 -l1 This ensures that all "downstream" libraries have been included in the linker command before the "upstream" library is referenced. Fixes rust-lang#47989 |
||
---|---|---|
.. | ||
build.rs | ||
Cargo.toml | ||
creader.rs | ||
cstore_impl.rs | ||
cstore.rs | ||
decoder.rs | ||
diagnostics.rs | ||
dynamic_lib.rs | ||
encoder.rs | ||
foreign_modules.rs | ||
index_builder.rs | ||
index.rs | ||
isolated_encoder.rs | ||
lib.rs | ||
link_args.rs | ||
locator.rs | ||
native_libs.rs | ||
schema.rs |