I am exploring the rustc, and would like to understand how to manually link the .o files into a executable.
-
create new project by
cargo new hello
-
emit .o files by
cargo +nightly rustc -vv -- --emit=obj
-
how to invovke rustc to link the generated .o files in target/debug/deps to a executable?
I tried ld.lld, but have below errors, seems missing to specify the compiler runtime
ld.lld-14 /home/gftea/repo/hello/target/debug/deps/hello-18bf37c42f8fa4a6.o
ld.lld-14: error: undefined symbol: std::rt::lang_start_internal::hc680b25eab888da9
>>> referenced by rt.rs:165 (/rustc/69f9c33d71c871fc16ac445211281c6e7a340943/library/std/src/rt.rs:165)
>>> /home/gftea/repo/hello/target/debug/deps/hello-18bf37c42f8fa4a6.o:(std::rt::lang_start::h8ebc40c383e97ff8)
ld.lld-14: error: undefined symbol: core::panicking::panic_fmt::h4235fa9b4675b332
>>> referenced by mod.rs:396 (/rustc/69f9c33d71c871fc16ac445211281c6e7a340943/library/core/src/fmt/mod.rs:396)
>>> /home/gftea/repo/hello/target/debug/deps/hello-18bf37c42f8fa4a6.o:(core::fmt::Arguments::new_v1::h13780d65d7abde6e)
ld.lld-14: error: undefined symbol: _Unwind_Resume
>>> referenced by function.rs:251 (/rustc/69f9c33d71c871fc16ac445211281c6e7a340943/library/core/src/ops/function.rs:251)
>>> /home/gftea/repo/hello/target/debug/deps/hello-18bf37c42f8fa4a6.o:(core::ops::function::FnOnce::call_once::h8b351b06410f3f30)
ld.lld-14: error: undefined symbol: std::io::stdio::_print::hd86e5e43b045ff1c
>>> referenced by main.rs:2 (src/main.rs:2)
>>> /home/gftea/repo/hello/target/debug/deps/hello-18bf37c42f8fa4a6.o:(hello::main::h6f6c1503373bf8d0)
ld.lld-14: error: undefined symbol: rust_eh_personality
>>> referenced by 1ilynpcbq5qyesrs
>>> /home/gftea/repo/hello/target/debug/deps/hello-18bf37c42f8fa4a6.o:(DW.ref.rust_eh_personality)