Im selben Ordner, in dem ich die .c-Datei habe, habe ich ein /openssl mit all diesen Dateien (und mehr), auch im synaptischen Paketmanager sehe ich OpenSSL installiert, ich versuche damit zu kompilieren:
gcc -o Opentest Opentest.c -lcrypto
aber ich bekomme immer die fehler:
error: openssl/ssl.h: No such file or directory
error: openssl/rsa.h: No such file or directory
error: openssl/x509.h: No such file or directory
error: openssl/evp.h: No such file or directory
Die Datei, die ich kompilieren möchte, ist nur eine .c-Datei, hat kein Makefile oder ./configure.
Ich habe es schon versucht:
env CFLAGS=-I/path/to/openssl/
und versucht, erneut zu kompilieren, aber ich erhalte die gleichen Fehler.
Was muss ich tun, um mit OpenSSL-Includes zu kompilieren?
Siehe auch How to compile openssl with relative rpath und Build OpenSSL with RPATH? Es stellt sicher, dass Sie zur Laufzeit die erwarteten Bibliotheken erhalten.
– jww
14. September 2018 um 20:14 Uhr
Café
Ihre Include-Pfade zeigen an, dass Sie gegen die kompilieren sollten System OpenSSL-Installation. Die solltest du nicht haben .h Dateien in Ihrem Paketverzeichnis – es sollte sie abholen /usr/include/openssl.
Das einfache OpenSSL-Paket (libssl) enthält nicht die .h Dateien – Sie müssen auch das Entwicklungspaket installieren. Diese wird benannt libssl-dev auf Debian, Ubuntu und ähnlichen Distributionen und libssl-devel auf CentOS, Fedora, Red Hat und ähnlichen.
@jahmax: Keine Sorge. Sie werden feststellen, dass die meisten Bibliothekspakete in Debian-basierten Distributionen eine *-dev Paket, das Sie gegen die Bibliothek kompilieren müssen (und häufig eine *-dbg Paket mit Debugging-Symbolen für die Bibliothek).
– Café
30. Juli 2010 um 23:40 Uhr
Direkt am. libssl-dev hat den Trick zum Erstellen von osslsigncode-1.5.2 auf Ubuntu gemacht.
– Karmakaze
20. Juni 2013 um 2:15 Uhr
Wie installiert man libssl-dev bei windows7?
– Wafeeq
19. Mai 2017 um 13:24 Uhr
@Wafeeq Kopieren Sie einfach Ihren Kommentar und fügen Sie ihn in eine Suchmaschine ein.
– emv
13. Juni 2019 um 19:23 Uhr
Anscheinend fehlt params.h in /usr/include/openssl/ nachdem Sie diese Schritte ausgeführt haben
Das -I sollte auf das Verzeichnis zeigen, das die openssl Mappe.
gcc -I/home/username/Programming/openssl/ -o Opentest -lcrypto Opentest.c es gibt mir die gleichen Fehler 🙁
– jahmax
30. Juli 2010 um 4:29 Uhr
Um Ihre Antwort zu erläutern, wenn der openssl-Ordner ist /path/to/openssl/ dann muss die Option sein -I/path/to/ @jamax. also du möchtest /home/username/Programming/
– Earlz
30. Juli 2010 um 4:36 Uhr
@Earlz: Danke, ich habe versucht, das mit der letzten expliziten Zeile zu sagen, aber es muss übersehen worden sein.
– Borealis
30. Juli 2010 um 4:42 Uhr
Danke, das hat funktioniert, aber jetzt bekomme ich Fehler in den Includes in openssl/ssl.h, die Dateien enthalten, die sich in /openssl/subfolders befinden. Wie kann ich gcc dazu bringen, diese zu finden?
– jahmax
30. Juli 2010 um 4:51 Uhr
@jah, wenn Sie “schlecht” sind und der Include-Pfad Ihres eigenen Projekts (openssl/*) stimmt nicht mit OpenSSL überein (möglich *) dann könntest du dieses Problem haben. Die beste Lösung ist, Ihr Projekt zu ändern ssl.h Anstatt von openssl/ssl.h usw. Die schnelle Lösung besteht darin, Include-Pfade für beide festzulegen /path/to/ und /path/to/openssl/
– Earlz
30. Juli 2010 um 4:58 Uhr
Benutzer2317002
Verwenden Sie den folgenden Ausschnitt als Lösung für die genannte Herausforderung.
yum install openssl
yum install openssl-devel
Getestet und bewährt unter CentOS Version 5.4 mit Keepalived Version 1.2.7.
Sie müssen den Bibliothekspfad (-L/usr/local/lib/) angeben.
Wenn sich die OpenSSL-Header in der openssl Unterverzeichnis des aktuellen Verzeichnisses, verwenden Sie:
gcc -I. -o Opentest Opentest.c -lcrypto
Der Präprozessor versucht, einen Namen wie “./openssl/ssl.h” von dem “.” in dem -I Option und der in spitzen Klammern angegebene Name. Wenn Sie die Namen in doppelten Anführungszeichen (#include "openssl/ssl.h"), hätten Sie die Frage vielleicht nie stellen müssen; der Compiler unter Unix sucht normalerweise automatisch nach Headern in doppelten Anführungszeichen im aktuellen Verzeichnis, nicht jedoch in spitzen Klammern (#include <openssl/ssl.h>). Es handelt sich um implementierungsdefiniertes Verhalten.
Sie sagen nicht, wo sich die OpenSSL-Bibliotheken befinden – Sie müssen möglicherweise eine entsprechende Option und ein Argument hinzufügen, um dies anzugeben, z.-L /opt/openssl/lib‘.
Ich habe -L/usr/lib versucht, aber ich bekomme immer noch Fehler in allen Includes von ssl.h, warum kann gcc sie nicht finden?
Daraus können Sie den Include-Verzeichnispfad und den Libs-Pfad ablesen. Jetzt lautet Ihr Präfix für die Include-Dateien /home/username/Programming . Daher sollte Ihre Include-Dateioption sein -I//home/username/Programming.
(Ja, ich habe es aus den Kommentaren oben)
Dies dient nur dazu, Protokolle bezüglich der Header zu entfernen. Sie können auch bereitstellen -L<Lib path> Option zur Verknüpfung mit der -lcrypto Bibliothek.
Ich habe -L/usr/lib versucht, aber ich bekomme immer noch Fehler in allen Includes von ssl.h, warum kann gcc sie nicht finden?
1) Wenn Sie spitze Klammern (<>) mit #include verwenden, sucht gcc die Header-Datei zuerst aus dem Systempfad wie z /usr/local/include und /usr/includeetc.
2) Der durch -L angegebene Pfaddir Befehlszeilenoption, wird vor den Standardverzeichnissen gesucht.
3)Wenn Sie quote(“”) mit #include als #include “file” verwenden, wird zuerst das Verzeichnis durchsucht, das die aktuelle Datei enthält.
also die antwort auf deine frage lautet wie folgt:
1) Wenn Sie Header-Dateien in Ihrem Quellcodeordner verwenden möchten, ersetzen Sie <> durch “” in der #include-Direktive.
2) Wenn Sie die Befehlszeilenoption -I verwenden möchten, fügen Sie sie zu Ihrer Kompilierungsbefehlszeile hinzu. (Wenn CFLAGS in Umgebungsvariablen festgelegt ist, wird sie nicht automatisch referenziert)
3) Über die Paketkonfiguration (openssl.pc) glaube ich nicht, dass darauf verwiesen wird, ohne dass es explizit in der Build-Konfiguration deklariert wird.
-ldir ist falsch. mit -les ist immer lib Anstatt von dir.
– Wafeeq
19. Mai 2017 um 11:49 Uhr
@GulluButt Es sollte -Ldir sein. Ich habe meine Antwort revidiert.
– gzh
19. Mai 2017 um 12:16 Uhr
Ich habe ein ähnliches Problem, das in dieser Frage erwähnt wird. Ich versuche, ein Beispiel aus dem folgenden Link zu kompilieren, aber es funktioniert nicht. Ich bin mir nicht sicher, ob meine Installation in Ordnung ist oder nicht. Wenn ich sage -lssles sucht ssl.dll im Installationsverzeichnis von openssl ? einfachstecodings.blogspot.de/2010/08/…
– Wafeeq
19. Mai 2017 um 13:20 Uhr
@GulluButt, für Linux bewirkt die Option -lssl, dass gcc libssl.so oder libssl.a nach benötigten Symbolen durchsucht.
– gzh
22. Mai 2017 um 0:56 Uhr
Unter Windows, nicht unter Linux.
– Wafeeq
22. Mai 2017 um 8:39 Uhr
14178000cookie-checkWie kompiliert man eine .c-Datei mit OpenSSL-Includes?yes
Siehe auch How to compile openssl with relative rpath und Build OpenSSL with RPATH? Es stellt sicher, dass Sie zur Laufzeit die erwarteten Bibliotheken erhalten.
– jww
14. September 2018 um 20:14 Uhr