参考

C 互操作指南

当前 C ABI 导出支持和目标库审计事实。

C 互操作指南

Zero 支持一个小巧、显式的 C ABI 导出接口。导出的 C 函数使用 原始标量参数或原生检查器接受的显式引用。

export c fn add i32 a i32 b i32  ret + a b

检查 ABI 接口:

bin/zero check conformance/native/pass/c-abi-export.0
bin/zero abi dump --json conformance/native/pass/c-abi-export.0

ABI 转储报告导出的 C 符号和一小段生成的头文件文本块。 对于 conformance/native/pass/c-abi-export.0generatedHeader.availabletrue,且头文件包含 zero_add 声明。

无效的导出接口在 C 代码生成之前就会失败:

bin/zero check --json conformance/native/fail/bad-c-export.0

头文件导入以类型化元数据的形式提供:

bin/zero graph --json --target linux-musl-x64 conformance/check/pass/c-header-import.0

图 JSON 通过 cImports[].typedModel 暴露导入的函数、 常量、结构体、枚举和类型定义。

它还包含一个缓存对象,其键为:

  • 头文件哈希
  • 目标平台
  • ABI
  • 标志哈希
  • sysroot 指纹

外部 C 调用需要目标库审计事实。zero graph --json 报告 每个 cLibraries[].linkPlan,包含包含路径、库路径、sysroot 状态、 目标 ABI 和主机发现状态。

交叉构建必须使用包相对的供应商头文件/库或 显式的目标 sysroot。它们不能静默复用主机的包含路径或库路径。

不安全的外部目标发现会在代码生成之前以 CIMP003 失败:

bin/zero build --json --target linux-musl-x64 conformance/c/host-leak-package --out .zero/out/host-leak-package