mirror of https://github.com/rust-lang/rust
27 lines
1014 B
Rust
27 lines
1014 B
Rust
// rustc will remove one of the two redundant references to foo below. Depending
|
|
// on which one gets removed, we'll get a linker error on SOME platforms (like
|
|
// Linux). On these platforms, when a library is referenced, the linker will
|
|
// only pull in the symbols needed _at that point in time_. If a later library
|
|
// depends on additional symbols from the library, they will not have been pulled
|
|
// in, and you'll get undefined symbols errors.
|
|
//
|
|
// So in this example, we need to ensure that rustc keeps the _later_ reference
|
|
// to foo, and not the former one.
|
|
|
|
//@ ignore-cross-compile
|
|
// Reason: the compiled binary is executed
|
|
|
|
use run_make_support::{build_native_dynamic_lib, build_native_static_lib, run, rustc};
|
|
|
|
fn main() {
|
|
build_native_dynamic_lib("foo");
|
|
build_native_static_lib("bar");
|
|
build_native_static_lib("baz");
|
|
rustc()
|
|
.args(&["-lstatic=bar", "-lfoo", "-lstatic=baz", "-lfoo"])
|
|
.input("main.rs")
|
|
.print("link-args")
|
|
.run();
|
|
run("main");
|
|
}
|