В чем разница между cffi out-of-line API и режимом ABI? - PullRequest
1 голос
/ 18 февраля 2020

В настоящее время я изучаю интерфейс Python и C (например, в данном случае с cffi). Я понял, что «режим вне линии» означает, что C -код был скомпилирован с общим объектом во время установки, а режим в строке означает, что это сделано во время импорта.

Я борюсь с тем, как распознать режим API против API в cffi. Является ли следующий 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)}")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...