简体   繁体   English

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

[英]Implicit declaration of function 'BN_init' error

I was checking out how to generate public keys from a private bitcoin address. 我正在检查如何从私人比特币地址生成公共密钥。
I found the following page: 我找到以下页面:
How do I obtain the public key from an ECDSA private key in OpenSSL? 如何从OpenSSL中的ECDSA私钥获取公钥?

But when I try to compile with gcc -Wall -Werror -O3 -o public_key public_key.c -lcrypto , I get the following errors: 但是,当我尝试使用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

I have OpenSSL installed and haven't had any programing errors related to it, until now. 我已经安装了OpenSSL,到目前为止还没有任何与它相关的编程错误。 Can someone point out what it is that I'm doing wrong? 有人可以指出我做错了什么吗?

You are using deprecated removed API. 您正在使用 不推荐 使用的 删除API。

As per BN_new(3) man page: 根据BN_new(3)手册页:

REMOVED FUNCTIONALITY void BN_init(BIGNUM *); 删除功能void BN_init(BIGNUM *);

BN_init() is no longer available as of OpenSSL 1.1.0. 从OpenSSL 1.1.0开始,BN_init()不再可用。 It was used to initialize an existing uninitialized BIGNUM. 它用于初始化现有的未初始化的BIGNUM。 Typically this would be done as follows: 通常,此操作如下:

  BIGNUM a; BN_init(&a); 

Applications should replace use of BN_init with BN_new instead: 应用程序应将BN_init的使用替换为BN_new:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM