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

时间:2010-09-04 15:50:33

标签: c binding d dmd

我真的很想进入D,但缺乏良好的图书馆支持确实阻碍了我。因此,我想为我想要使用的现有C库创建一些D绑定。我从未做过任何约束,但看起来也不太难。

我打算为D2做这个(不是特别是D1,但是如果它可以用于两者,甚至更好)。我正在使用DMD2编译器。

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

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

谢谢!

2 个答案:

答案 0 :(得分:4)

有几点需要注意:

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

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

  3. 就例子而言,一个值得关注的地方是醉酒时间,which contains bindings for the entire C standard library.

答案 1 :(得分:1)

您可以查看Aldacron如何处理Derelict2