在 C 和我的语言之间创建 FFI
Creating FFI between C and my language
假设我实现了一种编程语言(我们暂时称它为 A)。 A 与 C 非常相似。
我希望我的用户能够访问现有 C 库中的函数和数据结构。这可能吗?如果是,那么天真的实现会是什么样子?
一个
- 在 C++ 中实现
- 编译为机器码
- 需要访问闭源 C 库
这在很大程度上取决于 A 是哪种语言。
如果它是一种编译语言,那么您需要生成适当的汇编代码(查找"calling conventions",尤其是C 调用约定)来调用适当的C 函数。如果您使用的是 LLVM,则可以通过使用 declare
和 call
语句相当轻松地完成此操作。完成之后,您需要 link 针对有问题的 C 库的可执行文件。
但是,如果它是一种解释型语言,那么您将需要动态加载该库。你如何做到这一点是特定于平台的:例如,在 unix 类型的系统上,这可以通过 dlopen
函数来实现。
假设我实现了一种编程语言(我们暂时称它为 A)。 A 与 C 非常相似。
我希望我的用户能够访问现有 C 库中的函数和数据结构。这可能吗?如果是,那么天真的实现会是什么样子?
一个
- 在 C++ 中实现
- 编译为机器码
- 需要访问闭源 C 库
这在很大程度上取决于 A 是哪种语言。
如果它是一种编译语言,那么您需要生成适当的汇编代码(查找"calling conventions",尤其是C 调用约定)来调用适当的C 函数。如果您使用的是 LLVM,则可以通过使用 declare
和 call
语句相当轻松地完成此操作。完成之后,您需要 link 针对有问题的 C 库的可执行文件。
但是,如果它是一种解释型语言,那么您将需要动态加载该库。你如何做到这一点是特定于平台的:例如,在 unix 类型的系统上,这可以通过 dlopen
函数来实现。