@@ -12,9 +12,26 @@ don’t want to use the standard library via an attribute: `#![no_std]`.
12
12
> ` #![no_std] ` ] ( using-rust-without-the-standard-library.html )
13
13
14
14
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.
18
35
19
36
The function marked ` #[start] ` is passed the command line parameters
20
37
in the same format as C:
@@ -72,7 +89,6 @@ pub extern fn main(argc: i32, argv: *const *const u8) -> i32 {
72
89
# // fn main() {} tricked you, rustdoc!
73
90
```
74
91
75
-
76
92
The compiler currently makes a few assumptions about symbols which are available
77
93
in the executable to call. Normally these functions are provided by the standard
78
94
library, but without it you must define your own.
0 commit comments