diff options
| author | Smitty <me@smitop.com> | 2021-06-22 17:46:34 -0400 |
|---|---|---|
| committer | Smitty <me@smitop.com> | 2021-06-30 18:07:40 -0400 |
| commit | ce63d55bc7d1a1cd65d175e22787ea964bba0e2a (patch) | |
| tree | e7ab15456dd98fc300a622271dbe3aa623ec7022 /compiler/rustc_codegen_ssa/src/back | |
| parent | 6a5b97adb4da4b0f913d19765e91d4322ef6542e (diff) | |
| download | rust-ce63d55bc7d1a1cd65d175e22787ea964bba0e2a.tar.gz rust-ce63d55bc7d1a1cd65d175e22787ea964bba0e2a.zip | |
Add suggestions for "undefined reference" link errors
Diffstat (limited to 'compiler/rustc_codegen_ssa/src/back')
| -rw-r--r-- | compiler/rustc_codegen_ssa/src/back/link.rs | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/compiler/rustc_codegen_ssa/src/back/link.rs b/compiler/rustc_codegen_ssa/src/back/link.rs index 6c9ec9e7b0d..d47624da79a 100644 --- a/compiler/rustc_codegen_ssa/src/back/link.rs +++ b/compiler/rustc_codegen_ssa/src/back/link.rs @@ -912,14 +912,23 @@ fn link_natively<'a, B: ArchiveBuilder<'a>>( if !prog.status.success() { let mut output = prog.stderr.clone(); output.extend_from_slice(&prog.stdout); - sess.struct_err(&format!( + let escaped_output = escape_stdout_stderr_string(&output); + let mut err = sess.struct_err(&format!( "linking with `{}` failed: {}", linker_path.display(), prog.status - )) - .note(&format!("{:?}", &cmd)) - .note(&escape_stdout_stderr_string(&output)) - .emit(); + )); + err.note(&format!("{:?}", &cmd)).note(&escaped_output); + if escaped_output.contains("undefined reference to") { + err.help( + "some `extern` functions couldn't be found; some native libraries may \ + need to be installed or have their path specified", + ); + err.note("use the `-l` flag to specify native libraries to link"); + err.note("use the `cargo:rustc-link-lib` directive to specify the native \ + libraries to link with Cargo (see https://doc.rust-lang.org/cargo/reference/build-scripts.html#cargorustc-link-libkindname)"); + } + err.emit(); // If MSVC's `link.exe` was expected but the return code // is not a Microsoft LNK error then suggest a way to fix or |
