这是一个愚蠢的编译错误,但对于我的生活,我无法找出什么是错的。我花了几个小时,但我没有取得任何进展。我当然不了解OpenSSL以了解X509_NAME是什么。
我正在编译一个小C文件,如果有人调用文件中30个左右的函数之一,它的功能是打印出错误信息,表示C程序不支持30个SSL函数。每个功能大约3行(见下文)。从win32的OpenSSL openssl/X509.h
文件复制调用接口。 (我正在运行Windows10 x64,但是使用VStudio 2017命令行进行编译,设置为32位)。
以下是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
文件中复制了接口定义并将其转换为函数:
#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);
}
当我尝试使用针对32位的VS 2017命令行编译器编译代码时,我收到这些错误消息。第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"
答案 0 :(得分:5)
在openSSL中,X509_NAME
是一种类型,但<wincrypt.h>
将其定义为值(((LPCSTR) 7)
)。不要自己定义,但请使用openSSL标头,不要包含<wincrypt.h>
和#define WIN32_LEAN_AND_MEAN
,以避免通过其他Windows标头包含它。