Ruby FFI没有找到某些功能?

时间:2016-11-15 16:48:02

标签: c++ c ruby bitcoin ffi

我正在尝试使用Ruby的FFI库链接bitcoin-core secp256k1 library中的函数。

为了使secp256k1_ecdsa_sign函数可访问,我使用autotools构建了libsecp256k1(如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++命令创建),或者因为这个函数出于某种原因而不是C项目中面向公众的那个(虽然我不太了解C知道如何判断是否是这种情况。)

如果有人可以帮我弄清楚如何使用这个功能,我们将不胜感激。

1 个答案:

答案 0 :(得分:4)

最终只有在构建libsecp256k1库时指定[HttpPost] public MyObject Method([FromBody]Stream s, [FromUri]string first, [FromUri]string second) { //do something } 文件时才会包含该文件。具体来说,我需要运行secp256k1_recovery.h而不是./configure --enable-module-recovery