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...