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