From 0b090c4ad2fd8f11dbfbdc6d45454e4ffbe8cb76 Mon Sep 17 00:00:00 2001 From: RoggeOhta Date: Tue, 16 Jan 2024 23:16:24 +0800 Subject: [PATCH] Add build script part to FFI chapter for more clear and smooth learn experience --- src/ffi.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/ffi.md b/src/ffi.md index b76f0b2..799d515 100644 --- a/src/ffi.md +++ b/src/ffi.md @@ -21,6 +21,29 @@ libc = "0.2.0" [libc]: https://crates.io/crates/libc +## Prepare the build script + +Because [snappy](https://github.com/google/snappy) is a static library by default. So there is no C++ std linked in the output artifact. In order to use this foreign library in Rust, we have to manually specify that we want to link stdc++ in our project. The easiest way to do this is by setting up a build script. + +First edit `Cargo.toml`, inside `package` add `build = "build.rs"`. +```toml +[package] +... +build = "build.rs" +``` + +Then create a new file at the root of your workspace, named `build.rs`. +```rust +// build.rs +fn main() { +    println!("cargo:rustc-link-lib=dylib=stdc++"); +    println!("cargo:rustc-link-search="); +} +``` + +For more information, please read [The Cargo Book - build script](https://doc.rust-lang.org/cargo/reference/build-scripts.html). + + ## Calling foreign functions The following is a minimal example of calling a foreign function which will