以下脚本导致我的笔记本电脑出现分段错误:
import ctypes
from bitcoin.core.key import NID_secp256k1
ssl = ctypes.cdll.LoadLibrary(ctypes.util.find_library ('ssl') or 'libeay32')
ssl.i2o_ECPublicKey(ssl.EC_KEY_new_by_curve_name(NID_secp256k1), 0)
这段代码来自python bitcoinlib(https://github.com/petertodd/python-bitcoinlib)。 我还没有打开项目本身的票证,因为崩溃来自于libcrypto.so.1.0.0。在
我用的是Ubuntu 14.04,libcrypto.so.1.0.0,python 3.4。我也尝试过Python2,结果和我预期的一样。在
谢谢你的帮助。在
Windows上的这些库遇到问题。最终使用了
python-bitcoinrpc
库。那一款开箱即用。在以下是i2o_ECPublicKey()的OpenSSL文档。这些文档是为C程序员编写的,但是它们仍然包含了对Python程序员有用的信息(但是我承认,如果你知道C:),它会有所帮助。在
正如这些文档所述,
i2o_ECPublicKey()
的第二个参数应该是指向输出缓冲区的指针;如果您将NULL
作为第二个参数传递给i2o_ECPublicKey()
,它只返回输出缓冲区所需的字节数;您应该保存该返回值,以便可以使用正确大小的正确初始化缓冲区重新调用i2o_ECPublicKey
。要使用Python ctypes传递NULL
,您需要使用None
。我怀疑将0
传递给一个需要指针的lib函数可能会混淆事情,从而导致灾难性的结果。在所以用这个代替上面的代码:
看看这能不能避免segfault。如果有效,可以使用create_string_buffer(keysize)初始化实际的输出缓冲区。在
相关问题 更多 >
编程相关推荐