在 C 和我的语言之间创建 FFI

sja*_*rni 1 c c++ language-binding language-implementation ffi

假设我已经实现了一种编程语言(我们现在将其称为A )。A与C非常相似。

我希望我的用户能够访问现有 C 库中的函数和数据结构。这可能吗?如果是的话,一个幼稚的实现会是什么样子?

A

  • 是用C++实现的
  • 编译为机器代码
  • 需要访问闭源C库

Mic*_*son 6

这很大程度上取决于A是什么类型的语言。

如果它是编译语言,那么您需要生成适当的汇编代码(查找“调用约定”,特别是 C 调用约定)来调用适当的 C 函数。如果您使用 LLVM,则可以通过使用declareandcall语句相当轻松地完成此操作。完成此操作后,您需要将可执行文件链接到相关 C 库。

但是,如果它是解释性语言,那么您将需要动态加载该库。如何执行此操作是特定于平台的:例如,在 UNIX 类型的系统上,这可以通过该dlopen函数来实现。