diff --git a/src/ffi.md b/src/ffi.md index b76f0b2a..ead7c2ef 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