diff --git a/.gitignore b/.gitignore index dcb4ac3..bf9811d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ /target main .idea +*.o +*.so \ No newline at end of file diff --git a/build b/build new file mode 100755 index 0000000..4249f19 --- /dev/null +++ b/build @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +cc -c src/test.c +cc -shared test.o -o libtest.so +rustc -l test -L . src/main.rs diff --git a/src/main.rs b/src/main.rs index 2141259..1412a84 100644 --- a/src/main.rs +++ b/src/main.rs @@ -18,6 +18,10 @@ impl Greeter { } } +extern "C" { + fn print_num(num: i32); +} + fn main() { Greeter::new("Hello, Jesse!").greet(); @@ -42,4 +46,8 @@ fn main() { bst.insert(0); println!("{:?}", bst); println!("find result: {:?}", bst.find(0)); + + // calling some C + let find_result = bst.find(3).unwrap_or(-1); + unsafe { print_num(find_result); } } diff --git a/src/test.c b/src/test.c new file mode 100644 index 0000000..3d7dfda --- /dev/null +++ b/src/test.c @@ -0,0 +1,5 @@ +#include + +void print_num(int num) { + printf("[from c]: num is %d\n", num); +} \ No newline at end of file