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

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

29 lines
1.0 KiB
Rust
Raw Normal View History

2024-07-23 12:29:14 -05:00
// 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");
}