从openssl 1.0.1到1.1.0迁移代码时,转发声明错误

问题描述 投票:0回答:1

我有一个代码库,已从openssl 1.0.1移至1.1.0。其中的一个项目在编译时产生错误。某些部分确实编译没有错误,但我偶然发现了前向声明错误:

Foo/BarDH.cpp:37:28: error: member access into incomplete type 'dh_st'
        nRes = BN_bn2bin( key->pub_key, &keyout[0] );
                                  ^
/usr/local/sysroot/usr/local/include/openssl/ossl_typ.h:104:16: note: forward declaration of 'dh_st'
typedef struct dh_st DH;

这是文件的包含方式:

BarDH.cpp:

#include BarDH.hpp
[...]

BarDH.hpp:

#include <openssl/bn.h>
#include <openssl/dh.h>
#include <openssl/ec.h>
[...]
class BarDH{
    BarDH(void);
    virtual ~BarDH(void);

    enum
    {
     MAX_PUBKEY_SIZE = 2048 / 8
    };
    DH* key;
};

从openssl 1.0.1到1.1.0,应该如何包含文件的方式没有任何变化,或者有人可以看到这里发生了什么吗?谢谢!

openssl forward-declaration
1个回答
0
投票

OpenSSL 1.1.0使大多数结构不透明,因此不再允许您直接访问DH结构的成员。使用DH_get0_pub_key(key)来保持pub_key值,而不是BarDH.cpp的第37行上的key->pub_ke y。

https://www.openssl.org/docs/man1.1.1/man3/DH_get0_pub_key.html

© www.soinside.com 2019 - 2024. All rights reserved.