gpt4 book ai didi

ocaml - 从 C 头文件生成 Ocaml 绑定(bind) stub

转载 作者:行者123 更新时间:2023-12-02 09:22:51 25 4
gpt4 key购买 nike

我有一个头文件,它为某个库声明了 C API,我想为此库创建一个 OCaml 绑定(bind)。我发现 camlidl 可以从 IDL 文件创建 stub ,但据我了解,没有从 *.h 文件到 IDL 文件的自动转换,所以现在我想知道是否有其他方法来生成 stub 来自 C 头文件的 OCaml 绑定(bind)?

最佳答案

C 头文件中没有足够的信息来编写另一种语言的绑定(bind)。在非常简单的情况下(例如,所有函数仅接受整数或浮点参数),这是可能的,但是一旦涉及指针,您就需要提供更多信息:函数是否会从指向的值读取、写入到它,还是两者兼而有之?接口(interface)必须允许空指针吗?这实际上是一个指向数组的指针吗?它的大小在哪里?这个 char* 是指向以零结尾的字符串的指针吗?

IDL 使用额外的注释扩展了 C 函数声明以涵盖所有这些要点。这就是 camlidl 在 IDL 上工作而不是直接在 C header 上工作的原因。您不会发现任何明显减轻疼痛的方法。

还有另一种方法,即使用具有空扩展但提供额外类型信息的宏来随意注释 C header ,例如

int memmove(void ANN_OUT ANN_SIZE(n) ANN_NOT_NULL *dest,
const void ANN_IN ANN_SIZE(n) ANN_NOT_NULL *src,
size_t n);

这样的注释不是标准化的,所以如果你走这条路,你就必须编写自己的工具。 (如果您想解析 C,请查找 Cil。)我建议您将 IDL 声明视为主要声明,并从中生成 C 头文件。

关于ocaml - 从 C 头文件生成 Ocaml 绑定(bind) stub ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7942214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com