Ruby FFI не находит определенные функции?

Я пытаюсь использовать библиотеку FFI в Ruby для связывания функций из библиотеки bitcoin-core secp256k1.

Чтобы сделать функцию secp256k1_ecdsa_sign доступной, я собрал libsecp256k1 с помощью автоинструментов (как указано в README.md). Затем я создал общий объект для использования в FFI, запустив g++ -shared secp256k1/src/.libs/libsecp256k1_la-secp256k1.o, Импортирование этого в мой Ruby-файл с использованием FFI позволило мне использовать функцию, и все работало отлично.

Я пытаюсь сделать то же самое с функцией secp256k1_ecdsa_sign_recoverable, которая находится в том же проекте C, просто в другом заголовочном файле. Однако я получаю ошибку Function 'secp256k1_ecdsa_sign_recoverable' not found in [bin/secp256k1.so] (FFI::NotFoundError),

Я думаю, что это либо потому, что я не создаю общий объект должным образом (созданный с вышеупомянутым g++ команда), или потому что эта функция по какой-то причине не является общедоступной в проекте C (хотя я не знаю достаточно о C, чтобы понять, как это происходит).

Если бы кто-то мог помочь мне понять, как использовать эту функцию, это было бы очень ценно.

1 ответ

Решение

Это заканчивается secp256k1_recovery.h файл включается только в том случае, если вы указали это при сборке библиотеки libsecp256k1. Конкретно мне нужно было бежать ./configure --enable-module-recovery вместо ./configure,

Другие вопросы по тегам