diff --git a/src/ffi.md b/src/ffi.md index b4fdc02e..2f065a4e 100644 --- a/src/ffi.md +++ b/src/ffi.md @@ -21,6 +21,32 @@ 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. +n 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++"); // This line may be unnecessary for some environment. + 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