第十章:C 绑定

很多 C 库都很有用,我们应该充分利用他们而不是去重写他们。 在 Crystal 中,借助 bindings 来使用已存在的 C 库超级简单,即使是 Crystal 本身都在用一些 C 库,比如 libpcre 来实例化 Regex,下面是 Crystal 链接 libpcre 的例子:

@[Link("pcre")]
lib LibPCRE
...
end

链接 libpcre 只需要 3 行代码,我们使用 lib 关键字来把属于同一个库的方法和类型分为一组,并且从 Lib 开始你的 C 库声明很简单。

现在我们用 fun 关键字绑定到 C 函数中。

@[Link("pcre")]
lib LibPCRE
  type Pcre = Void*
  fun compile = pcre_compile(pattern : UInt8*, options : Int, errptr : UInt8**, erroffset : Int*, tableptr : Void*) : Pcre
end

这里我们用对应的类型绑定 libpcre 编译函数,就能在 Crystal 代码中轻松地访问这个函数了。

LibPCRE.compile(..)

Last updated