Ruby FFI 找不到某些功能?

Ruby FFI not finding certain functions?

我正在尝试将 Ruby 的 FFI 库用于 link 来自 bitcoin-core secp256k1 library 的函数。

制作 secp256k1_ecdsa_sign function accessible, I built libsecp256k1 using autotools (as directed in README.md)。然后我通过 运行 g++ -shared secp256k1/src/.libs/libsecp256k1_la-secp256k1.o 创建了一个要在 FFI 中使用的共享对象。使用 FFI 将其导入到我的 Ruby 文件中,让我可以使用该函数并且一切正常。

我正在尝试对 secp256k1_ecdsa_sign_recoverable 函数执行完全相同的操作,它位于同一个 C 项目中,只是头文件不同。但是,我收到错误 Function 'secp256k1_ecdsa_sign_recoverable' not found in [bin/secp256k1.so] (FFI::NotFoundError).

我认为这要么是因为我没有正确创建共享对象(使用上述 g++ 命令创建),要么是因为此函数出于某种原因不是面向 public C 项目中的一个(虽然我对 C 的了解还不够,不知道如何确定是否属于这种情况)。

如果有人能帮我弄清楚如何使用此功能,将不胜感激。

最终 secp256k1_recovery.h 文件仅在您在构建 libsecp256k1 库时指定的情况下包含。具体来说,我需要 运行 ./configure --enable-module-recovery 而不是 ./configure.