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