[Linuxtrent] Re: problemi di compilazione con OpenSSL

  • From: Emanuele Olivetti <emanuele@xxxxxxxxxxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: Fri, 12 Oct 2007 09:47:01 +0200

Roberto Resoli wrote:
> Il 11/10/07, Laura Gatti<lalo.gatti@xxxxxxxxx> ha scritto:
>   
>> Grazie del suggerimento, Roberto, intanto in privato Emanuele mi ha risolto
>> il problema. Ora devo andare in riunione e non ho tempo per spiegare com'e'
>> andata, ma appena posso lo faro'.
>>     
>
> grazie, sono curioso ...
>
> Rob
>   
Faccio un breve report io visto che Laura non e' al computer oggi.
Inoltre segnalo un comportamento bizzarro che ancora non ha spiegazione
(non ci abbiamo dedicato abbastanza tempo pero').

Il nocciolo del problema di Laura era legato alla presenza di due versioni
di openssl: la 0.9.8c (di sistema) e la 0.9.8e (installata in /usr/local).
A causa di un problema di configurazione della versione in local, durante
la compilazione il g++ prendeva gli header della "e" e i .so della "c".
Quindi si generavano errori in compilazione, peraltro poco indicativi
della situazione sottostante.

Riguardo l'errore di configurazione di openssl installato in local: quando
compili dai sorgenti il config di openssl come default NON crea shared
libraries (ovvero alla fine non ci sono libssl.so e libcrypto.so in
/usr/local/ssl/lib) ma solo la versione per compilazione
statica (ovvero libssl.a e libcrypto.a). Laura necessitava delle shared
libraries e non si era accorta della loro assenza. A dirla tutta, nell'
installazione in local erano stati creati  dei link simbolici che puntavano
al nulla con il nome libssl.so e libcrypto.so. Il g++, non trovando le
librerie
libcrypto e libssl nei path indicati alla riga di comando le ha
poi giustamente cercate - e trovate - nei path di sistema (/lib e /usr/lib)
ma purtroppo di una versione incompatibile rispetto agli header, creando
l'errore riportato.

Capito questo il problema si e' risolto ricompilando localmente
openssl-0.9.8e dopo aver lanciato "./config shared" al posto del solito
"./config". Con la configurazione "shared" vengono create libssl.so e
libcrypto.so. Poi ha funzionato tutto, come e' giusto che sia.

Nel fare qualche altra prova abbiamo riscontrato questo strano problema.
Almeno per me e' strano. Eccolo: provando una compilazione statica,
ovvero:
g++ libssl.a libcrypto.a dh_creation.cpp -o dh_creation
e' risultato un problema di simboli non risolti:
---
/tmp/ccHopaUB.o: In function `seed_rng()':
dh_creation.cpp:(.text+0x10a): undefined reference to `RAND_add'
dh_creation.cpp:(.text+0x15c): undefined reference to `RAND_add'
dh_creation.cpp:(.text+0x1ae): undefined reference to `RAND_add'
/tmp/ccHopaUB.o: In function `main':
dh_creation.cpp:(.text+0x22b): undefined reference to
`DH_generate_parameters_ex'
collect2: ld returned 1 exit status
---
Cambiando invece l'ordine dei file passati a g++ il problema sparisce:
g++ dh_creation.cpp libcrypto.a libssl.a -o dh_creation
infatti compila correttamente.

Io ho sempre creduto che l'ordine dei file fosse ininfluente...

Qualcuno sa spiegarmi perche' non e' vero? Non ho approfondito
ma appena ho tempo lo faccio. Ma se mi potete evitare la
ricerca... :)

Ciao,

Emanuele


-- 
Per iscriversi  (o disiscriversi), basta spedire un  messaggio con OGGETTO
"subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx


Other related posts: