簡體   English   中英

為現有C庫編寫D(D2)綁定

[英]Writing a D (D2) binding for existing C libraries

我真的很想進入D,但缺乏良好的圖書館支持真的會阻礙我。 因此,我想為我想要使用的現有C庫創建一些D綁定。 我從未做過任何約束,但看起來也不太難。

我打算為D2做這個(不是特別是D1,但是如果它可以用於兩者,甚至更好)。 我正在使用DMD2編譯器。

  • 應該使用哪些約定(我注意到版本語句,別名和常規常量/函數定義)?
  • 綁定到靜態庫(因此鏈接到)或動態庫之間的區別是什么? 綁定有什么區別嗎?
  • 對於綁定靜態庫,DMD編譯器似乎不接受.a或.o文件,僅接受.lib和.obj。 這是否意味着必須使用DMC編譯器(而不是GCC編譯器)編譯庫,然后通過DMD編譯器進行鏈接?

如果某人有一個非常簡短的例子來說明如何完成一個綁定,我會非常滿意。 目前我可以使用DMC編譯C代碼,鏈接目標文件並從D中的C代碼運行函數。但是,大多數C庫只需要包含頭文件並且需要在C中鏈接。我不確定如何制作適用於那個的綁定......

謝謝!

有幾點需要注意:

  1. DMD及其鏈接器Optlink使用較舊的OMF目標文件格式,而不是COFF。 這意味着您鏈接的C文件也需要是OMF。 如果您不想使用DMC,有些工具可以將COFF轉換為OMF,但我不知道它們的詳細信息。

  2. 至於將.h文件轉換為.d文件,一個名為htod的實用程序與DMD一起打包,並將為您執行此轉換,盡管如果您嚴重濫用預處理器有些不完美。 通常,對於清單常量使用constimmutableenum ,對條件編譯使用version語句,對宏函數使用常規(可能是模板化的)函數。

就示例而言,要查看的一個地方是druntime, 其中包含整個C標准庫的綁定。

你可以看看Aldacron與如何做Derelict2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM