gpt4 book ai didi

c - C 中的 X509_NAME 宏无法编译

转载 作者:行者123 更新时间:2023-12-01 08:46:36 27 4
gpt4 key购买 nike

这是一个愚蠢的编译错误,但对于我来说,我无法找出问题所在。我花了几个小时在上面,但我根本没有取得任何进展。而且我当然对 OpenSSL 的了解还不够,无法理解 X509_NAME 是什么。

我正在编译一个小的 C 文件,其功能是如果有人调用文件中的 30 个左右的函数之一,则打印出一条错误消息,以表明 C 程序不支持 30 个 SSL 函数。每个函数大约 3 行长(见下文)。调用接口(interface)复制自 OpenSSL openssl/X509.h win32的文件。 (我正在运行 Windows10 x64,但使用设置为 32 位的 VStudio 2017 命令行进行编译)。

这是 openssl/x509.h 包含文件的原始界面:

int X509_NAME_get_text_by_NID(X509_NAME *name, int nid, char *buf, int len);

自原创 x509.h包含文件里面说“Win32 上 X509_NAME 的定义位于 wincrypt.h 中”,我复制了 X509_NAME 的定义宏直接进入我的源文件,如下所示。

我的简单错误消息函数的代码如下。我刚刚从 openssl/x509.h 复制了接口(interface)定义文件并将其制成一个函数:
#define X509_NAME ((LPCSTR) 7) /* copied from wincrypt.h */
int X509_NAME_get_text_by_NID(X509_NAME *name, int nid, char *buf, int len) {
print_error (E_NO_SSL_SUPPORT);
return (-1);
}

当我尝试使用 VS 2017 命令行编译器为 32 位编译代码时,我收到这些错误消息。第 236 行包含麻烦的代码行 int X509_NAME_... .
cl   /c /Od /nologo /MT /I. "-I..\s" ..\s\stubssl.c
stubssl.c
..\s\stubssl.c(236): error C2143: syntax error: missing ')' before '('
..\s\stubssl.c(236): error C2091: function returns function
..\s\stubssl.c(236): error C2059: syntax error: ')'
..\s\stubssl.c(236): error C2143: syntax error: missing ')' before 'constant'
..\s\stubssl.c(236): error C2143: syntax error: missing '{' before 'constant'
..\s\stubssl.c(236): error C2059: syntax error: 'constant'
..\s\stubssl.c(242): error C2059: syntax error: '<parameter-list>'
c:\stubssl\winxp\make.exe: *** [stubssl.obj] Error 2

我使用另一个更简单的函数(但也使用 X509_NAME 宏)得到了同样的错误。它从第 242 行开始(请参阅上面的错误消息)。
X509_NAME *X509_get_subject_name(X509 *a) {
hio_oerror (E_NO_SSL_SUPPORT);
return (NULL);
}

有谁知道我如何尝试解决这个问题?看起来很简单,但对我来说却很难解决。我无法想象我怎么会在那些行中的 '(' 之前缺少 ')'。

编辑:我在 stubssl.c 中的包含文件:
#define WIN32_LEAN_AND_MEAN
#include "openssl/ssl.h"
#include "openssl/x509.h"
#include "openssl/bio.h"
#include "openssl/pem.h"

最佳答案

在 openSSL 中,X509_NAME是一个类型,但是 <wincrypt.h>将其定义为一个值 (((LPCSTR) 7))。不要自己定义,而是使用openSSL头,不要包含<wincrypt.h>#define WIN32_LEAN_AND_MEAN以避免它被包含在其他 Windows 标题中。

关于c - C 中的 X509_NAME 宏无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49504648/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com