abi - cffi 外联 API 和 ABI 模式有什么区别?
问题描述
我目前正在学习如何连接 Python 和 C 代码(例如在这种情况下使用 cffi)。我理解“外联模式”意味着 C 代码在安装时被编译为共享对象,而内联模式意味着它是在导入时完成的。
我很难在 cffi 中识别 ABI 与 API 模式。以下 MVCE 是 ABI 还是 API 的示例?
MVCE
libfib.cpp
int fib(int n) {
int a = 0, b = 1, i, tmp;
if (n <= 1) {
return n;
}
for (int i = 0; i < n - 1; i++) {
tmp = a + b;
a = b;
b = tmp;
}
return b;
}
extern "C" {
extern int cffi_fib(int n) {
return fib(n);
}
}
编译g++ -o ./libfib.so ./libfib.cpp -fPIC -shared
import cffi
ffi = cffi.FFI()
ffi.cdef("int cffi_fib(int n);")
C = ffi.dlopen("./libfib.so")
for i in range(10):
print(f"{i}: {C.cffi_fib(i)}")
解决方案
推荐阅读
- codeigniter - Codeigniter HMVC 模式
- javascript - 为 javascript 按钮添加样式
- javascript - 如何将项目添加到本地存储
- ios - 用于共享的所有可用 UIActivityType 的列表
- android-studio-3.1.3 - 为什么我的 TextView 中的文本没有显示在 Android Studio 的预览中?
- image - 如何在 PDF 文件中从服务器加载图像?
- javascript - 如何使用nodejs同时创建两个目录
- testng - Maven TestNG 项目未从命令提示符执行
- java - Java 和 Microsoft Access sql 选择命令与二进制搜索
- mysql - MySQL 社区服务器是本地的还是托管的