【问题标题】:Implicit declaration of function 'BN_init' error函数“BN_init”错误的隐式声明
【发布时间】:2018-06-11 06:30:36
【问题描述】:

我正在检查如何从私人比特币地址生成公钥。
我找到了以下页面:
How do I obtain the public key from an ECDSA private key in OpenSSL?

但是当我尝试使用gcc -Wall -Werror -O3 -o public_key public_key.c -lcrypto 进行编译时,出现以下错误:

public_key.c: In function 'generate_pubic_key':
public_key.c:26:13: error: storage size of 'start' isn't known
      BIGNUM start;
             ^~~~~
public_key.c:32:6: error: implicit declaration of function 'BN_init' [-Werror=implicit-function-declaration]
      BN_init(&start);
      ^~~~~~~
public_key.c:26:13: error: unused variable 'start' [-Werror=unused-variable]
      BIGNUM start;
             ^~~~~
cc1: all warnings being treated as errors

到目前为止,我已经安装了 OpenSSL,并且没有出现任何与之相关的编程错误。有人能指出我做错了什么吗?

【问题讨论】:

  • 您可能拥有 openssl 1.1.0 或更高版本,并且您正在使用以前不推荐使用且现在已完全删除的功能。请参阅下面的答案

标签: c openssl bitcoin


【解决方案1】:

您正在使用 deprecated 已删除的 API。

根据BN_new(3) 手册页:

移除的功能 无效 BN_init(BIGNUM *);

BN_init() 自 OpenSSL 1.1.0 起不再可用。它被用来 初始化一个现有的未初始化的 BIGNUM。通常这将是 完成如下:

 BIGNUM a;
 BN_init(&a);

应用程序应将 BN_init 的使用替换为 BN_new:

 BIGNUM *a;
 a = BN_new();
 if(!a) /* Handle error */
 ...
 BN_free(a);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-27
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多