docs: add long-form error-code docs for E0457

This commit is contained in:
Ezra Shaw
2022-12-18 22:00:35 +13:00
parent 7e66d451ad
commit 540c3f434f
3 changed files with 38 additions and 1 deletions

View File

@@ -0,0 +1,36 @@
Plugin `..` only found in rlib format, but must be available in dylib format.
Erroronous code example:
`rlib-plugin.rs`
```ignore (needs-linkage-with-other-tests)
#![crate_type = "rlib"]
#![feature(rustc_private)]
extern crate rustc_middle;
extern crate rustc_driver;
use rustc_driver::plugin::Registry;
#[no_mangle]
fn __rustc_plugin_registrar(_: &mut Registry) {}
```
`main.rs`
```ignore (needs-linkage-with-other-tests)
#![feature(plugin)]
#![plugin(rlib_plugin)] // error: plugin `rlib_plugin` only found in rlib
// format, but must be available in dylib
fn main() {}
```
The compiler exposes a plugin interface to allow altering the compile process
(adding lints, etc). Plugins must be defined in their own crates (similar to
[proc-macro](../reference/procedural-macros.html) isolation) and then compiled
and linked to another crate. Plugin crates *must* be compiled to the
dynamically-linked dylib format, and not the statically-linked rlib format.
Learn more about different output types in
[this section](../reference/linkage.html) of the Rust reference.
This error is easily fixed by recompiling the plugin crate in the dylib format.