使用chibi-scheme的FFI调用C

时间:2021-01-22 03:55:21

假设c语言写的二个函数为

void hello_user(const char *name) {
    printf("Hello, %s.\n", name);
    return;
}
void goodbye() {
    printf("Goodbye!\n");
    return;
}

如果想在chibi-scheme中调用c写的函数

第一步,建stub文件

可以建一个test.stub文件,内容如下

(define-c void hello-user (string))
(define-c void (so-long goodbye) ())
默认会把hello-user转化为c语言的hello_user,短横转化为下划线。或者提供别名,c的goodbye在scheme命名为so-long
第二步,加工stub文件
chibi-scheme提供了一个工具chibi-ffi,如果是自己编译的该文件在./tools/chibi-ffi
$ chibi-scheme .../tools/genstubs.scm test.stub
这样会生成一个test.c
第三步,编译成动态链接库
$ gcc -fPIC -shared -I.../include/ -L... -o hello.so hello.c test.c -lchibi-scheme
第四步,加载
在scheme中加载hello.so文件,即可调用上面的函数了
$ chibi-scheme
> (load "./hello.so")
> (hello-user "Taylor")
Hello, Taylor.
> (so-long)
Goodbye!