Aggiungi -L /usr/local/ssl/lib/
nella riga di comando di GCC, prima del -lcrypto
. Dal momento che stai costruendo rispetto alle intestazioni OpenSSL in /usr/local/ssl
, devi anche collegarti alla libreria effettiva con lo stesso prefisso (anche se sembra che ne sia installata solo una statica, questa potrebbe essere o meno la tua intenzione; potresti dover reinstallare correttamente il tuo OpenSSL creato dal sorgente).
(modifica) Per correggere il dlopen()
e gli amici non vengono trovati dal linker, aggiungi -ldl
nella riga di comando di GCC. -ldl
dice al linker di collegarsi anche a libdl.so, che è la libreria condivisa contenente dlopen()
, dlsym()
, dlclose()
eccetera.; queste funzioni sono utilizzate internamente da OpenSSL e, quindi, -ldl
è una dipendenza indiretta quando si usa -lcrypto
(su Linux). Poiché ti stai collegando a una versione statica di libcrypto, devi collegarti esplicitamente a tutte le dipendenze indirette.
Se non hai familiarità con il collegamento alle librerie appropriate, ti suggerisco di utilizzare OpenSSL come installato dal tuo gestore di pacchetti del sistema operativo; potrebbe risparmiarti qualche problema.
Questo potrebbe essere rilevante per le persone che hanno provato a creare il proprio openssl dal sorgente e poi usarlo per compilare altri programmi (nel mio caso Git)
Durante la configurazione di openssl, aggiungi l'opzione 'shared':
./config shared
Questo creerà la libreria condivisa richiesta libcrypto.so
. Troverai altro nel file INSTALL.
Inoltre, se incontri questo errore durante 'make'
"....can not be used when making a shared object
ricompilare con -fPIC
./config shared -fPIC