openssl - 将代码从 openssl 1.0.1 迁移到 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;
这是包含文件的方式:
巴DH.cpp:
#include BarDH.hpp
[...]
巴DH.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
值而不是key->pub_ke
BarDH.cpp 的第 37 行上的 y
https://www.openssl.org/docs/man1.1.1/man3/DH_get0_pub_key.html
推荐阅读
- ios - iOS12 导致 Metal Command Buffer 执行出错,渲染出现故障或未发生
- puppeteer - 使用 puppeteer 加载动态内容?
- r - 如何在R中找到曲线下的面积?
- mysql - 如何在我的 sql 中模拟“Intead of”触发器
- amazon-web-services - 在 Google Cloud Platform 上构建 API
- java - JAVA - 比较两个数组并创建一个仅包含第一个唯一值的新数组
- database - Amazon Mobile Hub vs 自定义后端 vs Parse
- dll - Windows 10 点本地重定向未按预期运行
- xml - 仅当标签包含特定字符串时才具有属性
- java - Unity AndroidJNI 解析类但不解析方法