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.0ABI 转储报告导出的 C 符号和一小段生成的头文件文本块。
对于 conformance/native/pass/c-abi-export.0,generatedHeader.available 为
true,且头文件包含 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