gpt4 book ai didi

c - 为现有 C 库编写 D (D2) 绑定(bind)

转载 作者:太空狗 更新时间:2023-10-29 17:24:01 28 4
gpt4 key购买 nike

我真的很想深入了解 D,但缺乏良好的库支持确实阻碍了我。因此,我想为我想使用的现有 C 库创建一些 D 绑定(bind)。我从来没有做过任何绑定(bind),但看起来也不太难。

我打算为 D2 做这个(不是专门为 D1,但如果两者都可以,那就更好了)。我正在使用 DMD2 编译器。

  • 应该使用什么约定(我注意到版本声明、别名和常规常量/函数定义)?
  • 绑定(bind)到静态库(并因此链接到)或动态库之间有什么区别?绑定(bind)有什么区别吗?
  • 对于绑定(bind)静态库,DMD 编译器似乎不接受 .a 或 .o 文件,只接受 .lib 和 .obj。这是否意味着必须使用 DMC 编译器(而不是 GCC 编译器)编译库,然后通过 DMD 编译器进行链接?

如果有人有一个非常简短的例子来说明如何完成绑定(bind),我会很满意。目前我可以用 DMC 编译 C 代码,链接目标文件并从 D 中的 C 代码运行函数。但是,大多数 C 库只需要一个头文件包含并且需要在 C 中链接。我不确定如何制作为此工作的绑定(bind)...

谢谢!

最佳答案

一些注意事项:

  1. DMD 及其链接器 Optlink 使用旧的 OMF 对象文件格式,而不是 COFF。这意味着您链接的 C 文件也需要是 OMF。如果您不想使用 DMC,可以使用一些工具将 COFF 转换为 OMF,但我不知道它们的详细信息。

  2. 就将 .h 文件转换为 .d 文件而言,一个名为 htod 的实用程序与 DMD 打包在一起,它将为您完成此转换,尽管如果您严重滥用预处理器,它会有些不完美。通常,您使用 constimmutableenum 作为 list 常量,version 语句用于条件编译,以及常规(可能是模板化的)宏函数的函数。

就示例而言,可以在运行时查看一个位置,which contains bindings for the entire C standard library.

关于c - 为现有 C 库编写 D (D2) 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3642940/

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