29 lines
1.0 KiB
Rust
29 lines
1.0 KiB
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, cwd, is_msvc, rfs, 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");
|
||
|
}
|