@@ -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
1414Obviously 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
1936The function marked ` #[start] ` is passed the command line parameters
2037in 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-
7692The compiler currently makes a few assumptions about symbols which are available
7793in the executable to call. Normally these functions are provided by the standard
7894library, but without it you must define your own.
0 commit comments