首页 > 解决方案 > 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)}")

标签: abipython-cffi

解决方案


推荐阅读