跨语言调用是很方便实用的操作,但其实现并非想象的那么简单,包含有复杂的 ABI 设计、语言间的兼容交互等,本文将介绍一个跨语言调 C 库:DragonFFI。
1、定义
在官方 github 仓库中就有相关的说明,DragonFFI 是 C 语言的 FFI(Foreign Function Interface,外部函数接口)库,使用 C++ 编写,基于 clang/llvm 来实现。
跨语言调用 C ,一般有通过手写胶水代码的(JNI,Python,Ruby)、生成胶水代码的(SWIG)、扩展 C 的(C++,Objective-C)。
而 FFI 即其他语言可以通过它所提供的 API 和绑定来调用 C 语言的函数。
A foreign function interface (FFI) is a mechanism by which aprogram written in one programming language can call routines ormake use of services written in another.
# 比如这里用 python 进行 C 语言函数的调用
import pydffi
CU = pydffi.FFI().cdef("int puts(const char* s);");
CU.funcs.puts("hello world!")
# JIT
# First, declare an FFI context
F = pydffi.FFI()
# Then, compile a module and get a compilation unit
CU = F.compile("int add(int a, int b) { return a+b; }")
# And call the function
print

DragonFFI是一个使用C++编写的C语言FFI库,利用clang/llvm实现,支持动态编译和多种调用约定。与libffi和cffi相比,DragonFFI能解析C语言类型,如结构体和函数,且无需手写汇编。它通过LLVM元数据解析C语言类型,并创建自定义类型系统,减少了大量工作。适用于Linux、OSX和Windows平台,支持Intel 32位和64位CPU。
最低0.47元/天 解锁文章
5089

被折叠的 条评论
为什么被折叠?



