函数 'BN_init' 的隐式声明错误

Dea*_*nie 3 c openssl bitcoin

我正在检查如何从私人比特币地址生成公钥。
我找到了以下页面:
如何从 OpenSSL 中的 ECDSA 私钥获取公钥?

但是当我尝试使用 编译时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
Run Code Online (Sandbox Code Playgroud)

我已经安装了 OpenSSL,直到现在还没有任何与之相关的编程错误。有人可以指出我做错了什么吗?

Ahm*_*sud 5

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

根据BN_new(3)手册页:

删除功能 void BN_init(BIGNUM *);

从 OpenSSL 1.1.0 开始,BN_init() 不再可用。它用于初始化现有的未初始化的 BIGNUM。通常,这将按如下方式完成:

 BIGNUM a;
 BN_init(&a);
Run Code Online (Sandbox Code Playgroud)

应用程序应该用 BN_new 代替 BN_init 的使用:

 BIGNUM *a;
 a = BN_new();
 if(!a) /* Handle error */
 ...
 BN_free(a);
Run Code Online (Sandbox Code Playgroud)