Fügen Sie -L /usr/local/ssl/lib/
hinzu in die GCC-Befehlszeile vor dem -lcrypto
. Da bauen Sie gegen die OpenSSL-Header unter /usr/local/ssl
, müssen Sie auch mit der eigentlichen Bibliothek unter demselben Präfix verlinken (obwohl Sie dort anscheinend nur eine statische Bibliothek installiert haben, kann dies Ihre Absicht sein oder nicht; Sie müssen möglicherweise Ihr OpenSSL, das aus den Quellen erstellt wurde, ordnungsgemäß neu installieren).
(Bearbeiten) Um die dlopen()
zu reparieren und Freunde, die vom Linker nicht gefunden werden, fügen Sie -ldl
hinzu in die GCC-Befehlszeile. -ldl
weist den Linker an, auch gegen libdl.so zu linken, das ist die gemeinsam genutzte Bibliothek, die dlopen()
enthält , dlsym()
, dlclose()
etc.; diese Funktionen werden von OpenSSL intern verwendet und daher -ldl
ist eine indirekte Abhängigkeit bei Verwendung von -lcrypto
(unter Linux). Da Sie auf eine statische Version von libcrypto verlinken, müssen Sie ausdrücklich alle indirekten Abhängigkeiten verlinken.
Wenn Sie mit dem Verknüpfen mit den richtigen Bibliotheken nicht vertraut sind, würde ich vorschlagen, dass Sie OpenSSL so verwenden, wie es von Ihrem Betriebssystem-Paketmanager installiert wurde. es könnte Ihnen Ärger ersparen.
Dies könnte für Leute relevant sein, die versucht haben, ihr eigenes Openssl aus dem Quellcode zu erstellen und es dann zum Kompilieren anderer Programme (in meinem Fall Git) zu verwenden
Fügen Sie während der Konfiguration von openssl die Option „shared“ hinzu:
./config shared
Dadurch wird die erforderliche gemeinsam genutzte Bibliothek libcrypto.so
erstellt . Weitere Informationen finden Sie in der INSTALL-Datei.
Auch, wenn Sie während 'make'
auf diesen Fehler stoßen
"....can not be used when making a shared object
neu kompilieren mit -fPIC
./config shared -fPIC