|
|
|
@ -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=<YOUR SNAPPY LIBRARY PATH>");
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|