As we stated in the previous section, when Rust libraries expose their functions to other languages using the extern block, they expose the C ABI (cdecl) by default. As such, it becomes a very seamless experience of calling Rust code from C. To C, they appear just like regular C functions. We'll take a look at an example of calling Rust code from a C program. Let's create a cargo project for this by running cargo new rust_from_c --lib.
In our Cargo.toml file, we have the following items:
# rust_from_c/Cargo.toml
[package]
name = "rust_from_c"
version = "0.1.0"
authors = ["Rahul Sharma <creativcoders@gmail.com>"]
edition = "2018"
[lib]
name = "stringutils"
crate-type = ["cdylib"]
Under the [lib] section, we specified the crate as cdylib, which indicates that we want a dynamically loadable...