将代码从 openssl 1.0.1 迁移到 1.1.0 时的前向声明错误
Forward declaration error when migrating code from openssl 1.0.1 to 1.1.0
我有一个代码库已从 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 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
我有一个代码库已从 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 1.1.0 使大多数结构变得不透明,因此您不再被允许直接访问 DH 结构的成员。使用 DH_get0_pub_key(key)
获取 pub_key
值而不是 BarDH.cpp
key->pub_ke
y
https://www.openssl.org/docs/man1.1.1/man3/DH_get0_pub_key.html