C 指向不完整类型的OpenSSL取消引用指针

C 指向不完整类型的OpenSSL取消引用指针,c,ssl,struct,openssl,C,Ssl,Struct,Openssl,我正在使用OpenSSL库。我正在尝试访问struct engine st的rsa_meth属性。执行此操作的代码如下: ctx->客户端证书引擎->rsa方法 其中,ctx的类型为SSL_ctx* 我试图包括所有必要的头文件,但它仍然给我: 取消引用指向不完整类型的指针。 尽管如此,如果我删除rsa\u meth,它就可以正常工作。这意味着rsa\u meth结构没有定义。您需要在openssl/rsa.h中包含它的定义 请包括openssl/rsa.h或 加 #包括 您正在取消引用ctx-

我正在使用OpenSSL库。我正在尝试访问struct engine st的rsa_meth属性。执行此操作的代码如下:

ctx->客户端证书引擎->rsa方法

其中,ctx的类型为SSL_ctx*

我试图包括所有必要的头文件,但它仍然给我:

取消引用指向不完整类型的指针。


尽管如此,如果我删除rsa\u meth,它就可以正常工作。

这意味着rsa\u meth结构没有定义。您需要在openssl/rsa.h中包含它的定义

请包括openssl/rsa.h或

#包括

您正在取消引用ctx->client\u cert\u engine,它是一个引擎*(指向结构引擎的指针)

尝试包括

引擎(即客户端证书引擎)是一个内部结构定义(在crypto/engine/eng\u int.h中),不在公共标头中公开。这(可能)是为了防止结构发生更改时出现二进制兼容性问题。使用engine.h标头中定义的getter,而不是尝试取消引用:

 const char *ENGINE_get_id(const ENGINE *e);
 const char *ENGINE_get_name(const ENGINE *e);
 const RSA_METHOD *ENGINE_get_RSA(const ENGINE *e);
 const DSA_METHOD *ENGINE_get_DSA(const ENGINE *e);
 const ECDH_METHOD *ENGINE_get_ECDH(const ENGINE *e);
 const ECDSA_METHOD *ENGINE_get_ECDSA(const ENGINE *e);
 const DH_METHOD *ENGINE_get_DH(const ENGINE *e);
 const RAND_METHOD *ENGINE_get_RAND(const ENGINE *e);
 const STORE_METHOD *ENGINE_get_STORE(const ENGINE *e);

还有一件事,我发现问题不仅仅在于RSA_METH,我无法从client_cert_引擎结构访问任何元素。因此,我假设代码无法找到引擎结构的定义。
 const char *ENGINE_get_id(const ENGINE *e);
 const char *ENGINE_get_name(const ENGINE *e);
 const RSA_METHOD *ENGINE_get_RSA(const ENGINE *e);
 const DSA_METHOD *ENGINE_get_DSA(const ENGINE *e);
 const ECDH_METHOD *ENGINE_get_ECDH(const ENGINE *e);
 const ECDSA_METHOD *ENGINE_get_ECDSA(const ENGINE *e);
 const DH_METHOD *ENGINE_get_DH(const ENGINE *e);
 const RAND_METHOD *ENGINE_get_RAND(const ENGINE *e);
 const STORE_METHOD *ENGINE_get_STORE(const ENGINE *e);