|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2004
Città: Brescia
Messaggi: 41
|
Usare librerie openssl in programmi C
Ciao, pongo a voi esperti una questione che in questi giorni mi sta creando grattacapi:
devo compilare un programma che fa uso della libreria sha.h di openssl solo che in fase di compilazione gcc mi dà errore dicendo che faccio un riferimento non definito alla funzione SHA1. La stessa cosa mi succede quando provo a compilare un file di esempio preso dalla documentazione. In usr/include c'è la cartella openssl e nel codice includo le varie librerie, c'è forse qualche parametro extra che devo passare al gcc affinchè tutto vada a buon fine? Il codice di esempio è questo: Codice:
#include <stdio.h>
#include <openssl/evp.h>
main(int argc, char *argv[])
{
EVP_MD_CTX mdctx;
const EVP_MD *md;
char mess1[] = "Test Message\n";
char mess2[] = "Hello World\n";
unsigned char md_value[EVP_MAX_MD_SIZE];
int md_len, i;
OpenSSL_add_all_digests();
if(!argv[1]) {
printf("Usage: mdtest digestname\n");
exit(1);
}
md = EVP_get_digestbyname(argv[1]);
if(!md) {
printf("Unknown message digest %s\n", argv[1]);
exit(1);
}
EVP_MD_CTX_init(&mdctx);
EVP_DigestInit_ex(&mdctx, md, NULL);
EVP_DigestUpdate(&mdctx, mess1, strlen(mess1));
EVP_DigestUpdate(&mdctx, mess2, strlen(mess2));
EVP_DigestFinal_ex(&mdctx, md_value, &md_len);
EVP_MD_CTX_cleanup(&mdctx);
printf("Digest is: ");
for(i = 0; i < md_len; i++) printf("%02x", md_value[i]);
printf("\n");
}
__________________
Vale più un uomo paziente che un eroe. |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Mar 2005
Città: ~
Messaggi: 740
|
Quote:
magari in compilazione devi usare il flag "-l<nome_libreria_openssl>"esempio (nel caso di funzioni matematiche usi la libreria "m"): gcc -lm -o prova prova.c credo che sulla documentazione esista il nome della libreria...
__________________
Ciao ciao cagnolino Billy MacMini late 2009, 2.53GHz, 4GB ram, 320GB hard disk, Snow Leopard 10.8.2 - iPod Nano 6th gen. XBOX Live GamerTag: InsaneMau |
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Oct 2004
Città: Brescia
Messaggi: 41
|
Sì, ho provato con l'opzione -lssl ed ha compilato.
Credevo che per includere le librerie bastasse usare l'istruzione #include<percorso libreria>, invece talvolta occorre anche l'opzione -l. Grazie per l'aiuto!
__________________
Vale più un uomo paziente che un eroe. |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19149
|
Quote:
con #include tu dici al preprocessore di tirare dentro i file .h dove tipicamente sono definite delle macro oppure delle strutture e delle funzioni. non c'è codice però. significa che il compilatore sa che esiste una funzione x (definita nel .h) perché ha visto il prototipo, quindi non hai problemi di compilazione la grana salta fuori quando arrivi al linker che mette insieme il codice già compilato. se non includi la libreria il linker non può trovare la famosa funzione x, quindi restituisce quell'errore |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:47.




















