2017-08-28 2 views
0

Das ist mein Beispielcode:Die ASN.1 Struktur Iterator nur erklärt werden, aber nicht umgesetzt

#include <openssl/asn1.h> 
#include <openssl/asn1t.h> 
#include <openssl/rsa.h> 
#include <openssl/x509.h> 

typedef struct key_st { 
    X509_ALGOR *algorithm_id; 
    RSA *key_material; 
} KEY; 

DECLARE_ASN1_FUNCTIONS(KEY) 

IMPLEMENT_ASN1_FUNCTIONS(KEY) 

int main() 
{ 
    return 0; 
} 

, wenn ich es kompilieren, wird die folgende Fehler gemeldet:

$ gcc -o ssltest ssltest.c -lssl -lcrypto 
/tmp/cch0HA77.o: In function `d2i_KEY': 
ssltest.c:(.text+0x21): undefined reference to `KEY_it' 
/tmp/cch0HA77.o: In function `i2d_KEY': 
ssltest.c:(.text+0x48): undefined reference to `KEY_it' 
/tmp/cch0HA77.o: In function `KEY_new': 
ssltest.c:(.text+0x5e): undefined reference to `KEY_it' 
/tmp/cch0HA77.o: In function `KEY_free': 
ssltest.c:(.text+0x7a): undefined reference to `KEY_it' 
collect2: error: ld returned 1 exit status 

Nach Überprüfung der Makro- erweiterter Code, ich fand die KEY_it deklariert als:

extern const ASN1_ITEM KEY_it; 

So der Linker Bericht undefinierte Referenzen. Wie kann ich es reparieren? Vielen Dank!

+0

Ooh, ich etwas verpasst: es fix war, nachdem ich die Sequenzdefinition für KEY hinzufügen: ASN1_SEQUENCE (KEY) = { \t ASN1_SIMPLE (KEY, algorithm_id, X509_ALGOR), \t ASN1_SIMPLE (SCHLÜSSEL, Schlüssel_material, RSAPublicKey) } ASN1_SEQUENCE_END (KEY) –

Antwort

0

Es fix war, nachdem ich die Sequenzdefinition für KEY hinzufügen:

ASN1_SEQUENCE(KEY) = { 
    ASN1_SIMPLE(KEY, algorithm_id, X509_ALGOR), 
    ASN1_SIMPLE(KEY, key_material, RSAPublicKey) 
} ASN1_SEQUENCE_END(KEY) 
Verwandte Themen