我正在尝试弄清楚crystal中的c绑定是如何工作的。首先,我想知道如何将一个简单的hello world c函数包含到crystal中。从基础开始总是很好的,对吧?这是我想要包含的函数:
#include <stdio.h>
void hello(const char * name){
printf("Hello %s!\n", name);
}
我正在尝试弄清楚crystal中的c绑定是如何工作的。首先,我想知道如何将一个简单的hello world c函数包含到crystal中。从基础开始总是很好的,对吧?这是我想要包含的函数:
#include <stdio.h>
void hello(const char * name){
printf("Hello %s!\n", name);
}
我也花了一些时间才明白这个。首先,你需要将C文件编译成一个对象。在gcc中,你需要运行 gcc -c hello.c -o hello.o
。
然后,在crystal文件中,你需要链接到C对象。以下是一个示例:
#hello.cr
@[Link(ldflags: "#{__DIR__}/hello.o")]
lib Say
fun hello(name : LibC::Char*) : Void
end
Say.hello("your name")
现在,您只需要编译您的Crystal应用程序,它就可以工作了。
crystal build hello.cr
libawesome.so
(从C端看起来很复杂),然后就可以像通常的例子一样使用它:@[Link("awesome")]
。 - Oleh Prypin