簡體   English   中英

C中的X509_NAME宏無法編譯

[英]X509_NAME macro in C won't compile

這是一個愚蠢的編譯錯誤,但是對於我一生來說,我無法找出問題所在。 我已經花了幾個小時,但一點都沒有取得進展。 而且我對OpenSSL的了解當然還不夠,無法理解X509_NAME是什么。

我正在編譯一個小的C文件,如果有人調用文件中的30個左右函數之一,則該函數的功能是打印出錯誤消息,以指示C程序不支持30個SSL函數。 每個功能約3行長(請參見下文)。 openssl/X509.h的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);
}

當我嘗試使用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頭文件包含。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM