rust/tests/run-make/redundant-libs/rmake.rs

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");
}