Skip to content

Commit 4c45d26

Browse files
authored
Auto merge of #34132 - AtheMathmo:no-stdlib, r=steveklabnik
Note warning of default features on libc The default features of libc include libstd. This should be noted on this page.
2 parents 5c2a5d4 + 8844fd4 commit 4c45d26

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

src/doc/book/no-stdlib.md

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,26 @@ don’t want to use the standard library via an attribute: `#![no_std]`.
1212
> `#![no_std]`](using-rust-without-the-standard-library.html)
1313
1414
Obviously there's more to life than just libraries: one can use
15-
`#[no_std]` with an executable, controlling the entry point is
16-
possible in two ways: the `#[start]` attribute, or overriding the
17-
default shim for the C `main` function with your own.
15+
`#[no_std]` with an executable.
16+
17+
### Using libc
18+
19+
In order to build a `#[no_std]` executable we will need libc as a dependency. We can specify
20+
this using our `Cargo.toml` file:
21+
22+
```toml
23+
[dependencies]
24+
libc = { version = "0.2.11", default-features = false }
25+
```
26+
27+
Note that the default features have been disabled. This is a critical step -
28+
**the default features of libc include the standard library and so must be
29+
disabled.**
30+
31+
### Writing an executable without stdlib
32+
33+
Controlling the entry point is possible in two ways: the `#[start]` attribute,
34+
or overriding the default shim for the C `main` function with your own.
1835

1936
The function marked `#[start]` is passed the command line parameters
2037
in the same format as C:
@@ -72,7 +89,6 @@ pub extern fn main(argc: i32, argv: *const *const u8) -> i32 {
7289
# // fn main() {} tricked you, rustdoc!
7390
```
7491

75-
7692
The compiler currently makes a few assumptions about symbols which are available
7793
in the executable to call. Normally these functions are provided by the standard
7894
library, but without it you must define your own.

0 commit comments

Comments
 (0)