Calling C code from Rust
First, we'll take a look at an example of calling C code from Rust. We'll create a new binary crate from which we'll call our C function that's defined in a separate C file. Let's create a new project by running cargo new c_from_rust
. Within the directory, we'll also add our C source, that is, the mystrlen.c
file, which has the following code inside it:
// c_from_rust/mystrlen.c unsigned int mystrlen(char *str) { unsigned int c; for (c = 0; *str != '\0'; c++, *str++); return c; }
It contains a simple function, mystrlen
, which returns the length of a string passed to it. We want to invoke mystrlen
from Rust. To do that, we'll need to compile this C source into a static library. There's one more example in the upcoming section, where we cover linking dynamically to a shared library. We'll use the cc
crate as a build dependency in our Cargo.toml
file:
# c_from_rust/Cargo.toml [build-dependencies] cc = "1.0"
The cc
crate does all the heavy lifting of compiling...