1

我正在使用 OpenSSL 库。我正在尝试访问 struct engine_st 的 rsa_meth 属性。做的代码如下:

ctx->client_cert_engine->rsa_meth

其中 ctx 是 SSL_CTX * 类型。

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

dereferencing pointer to incomplete type.

虽然,如果我删除 rsa_meth 那么它工作正常。

4

3 回答 3

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);
于 2013-07-12T15:44:07.167 回答
0

这意味着没有定义 RSA_METH 结构。您需要在 openssl/rsa.h 中包含其定义

请包括 openssl/rsa.h 或

添加

#include <openssl/rsa.h>

在此代码之前添加到您的代码。

于 2013-06-02T10:28:33.347 回答
0

您正在取消引用 ctx->client_cert_engine,它是一个 ENGINE *(指向 struct engine_st 的指针)。

尝试包括<openssl/engine.h>.

于 2013-06-03T10:52:00.183 回答