Skip to main content
bun:ffi 具有实验性的支持,可从 JavaScript 以低开销编译和运行 C 代码。

用法(bun:ffi 中的 cc)

有关背景信息,请参见介绍博客文章 JavaScript:
hello.ts
C 源码:
hello.c
运行 hello.ts 输出:
terminal
cc 使用 TinyCC 编译 C 代码,然后将其与 JavaScript 运行时链接,原地转换类型。

基本类型

cc 支持与 dlopen 相同的 FFIType 值。

字符串、对象和非基本类型

对于字符串、对象和其他不能一对一映射到 C 类型的非基本类型,cc 支持 N-API。 使用 napi_value 可以从 C 函数传递或接收 JavaScript 值,而无需进行任何类型转换。 您也可以传递一个 napi_env 来获取用于调用 JavaScript 函数的 N-API 环境。

向 JavaScript 返回 C 字符串

例如,要从 C 向 JavaScript 返回一个字符串:
hello.ts
在 C 中:
hello.c
同样的方法可以返回其他类型,如对象和数组:
hello.c

cc 参考

library: string[]

使用 library 数组指定要与 C 代码链接的库。

symbols

使用 symbols 对象指定要暴露给 JavaScript 的函数和变量。

source

source 是要编译并与 JavaScript 运行时链接的 C 代码路径。

flags: string | string[]

flags 是传递给 TinyCC 编译器的可选字符串数组。
这些是像 -I(用于包含目录)和 -D(用于预处理器定义)这样的标志。

define: Record<string, string>

define 是传递给 TinyCC 编译器的可选预处理器定义对象。