Wie kompiliert man eine .c-Datei mit OpenSSL-Includes?

Lesezeit: 6 Minuten

Benutzeravatar von jahmax
jamax

Ich versuche, eine kleine .c-Datei zu kompilieren, die Folgendes enthält:

#include <openssl/ssl.h>
#include <openssl/rsa.h>
#include <openssl/x509.h>
#include <openssl/evp.h>

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

Benutzeravatar von caf
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

    – Reeshabh Ranjan

    29. März 2020 um 12:18 Uhr


Verwenden Sie die -I gcc richtig kennzeichnen.

gcc -I/path/to/openssl/ -o Opentest -lcrypto Opentest.c

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

Benutzeravatar von user2317002
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.

gcc -o Opentest Opentest.c -L/usr/local/lib/ -lssl -lcrypto

Für mich geht das.

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?

    – jahmax

    30. Juli 2010 um 14:50 Uhr

Benutzeravatar von Praveen S
Praveen S

Aus der Datei openssl.pc

prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

Name: OpenSSL
Description: Secure Sockets Layer and cryptography libraries and tools
Version: 0.9.8g
Requires:
Libs: -L${libdir} -lssl -lcrypto
Libs.private: -ldl -Wl,-Bsymbolic-functions -lz
Cflags: -I${includedir}

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?

    – jahmax

    30. Juli 2010 um 14:50 Uhr

Für diesen gcc-Fehler sollten Sie auf die verweisen gcc-Dokument über den Suchpfad.

Zusamenfassend:

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

1417800cookie-checkWie kompiliert man eine .c-Datei mit OpenSSL-Includes?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy