我正在使用OpenSSL库。我试图访问struct engine_st的rsa_meth属性。做的代码如下:
则将ctx-> client_cert_engine-> rsa_meth
其中ctx的类型为SSL_CTX *。
我试图包含所有必要的头文件,但它还是给了我:
dereferencing pointer to incomplete type.
虽然,如果我删除rsa_meth,那么它可以正常工作。
答案 0 :(得分:2)
engine_st(client_cert_engine是什么)是一个内部结构定义(它在crypto / engine / eng_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);
答案 1 :(得分:0)
这意味着未定义RSA_METH结构。您需要在openssl / rsa.h中包含其定义
请包含openssl / rsa.h或
添加
#include <openssl/rsa.h>
到此代码之前的代码。
答案 2 :(得分:0)
您正在取消引用ctx-&gt; client_cert_engine,它是一个ENGINE *(指向struct engine_st的指针)。
尝试加入<openssl/engine.h>
。