2016-10-06 4 views
1

Während der Umsetzung Code für die SSL-Handshake mit Asio, das Projekt nicht bauen und wirft FehlerAsio Abhängigkeit von OpenSSL

C:\Eclipse\Boost\boost_1_62_0/boost/asio/ssl/detail/openssl_types.hpp:19:26: fatal error: openssl/conf.h: No such file or directory

So ist es, dass für SSL bedeutet mit Asio wir OpenSSL installieren?

Nun, das ist nicht der Punkt, den ich erheben wollte. Die Frage ist, gibt es noch eine Alternative, um Asio SSL zu verwenden, ohne den Client zu fragen, OpenSSL zu installieren, oder anders ausgedrückt, wie kann ich OpenSSL mit meiner Anwendung in einer einzigen ausführbaren Datei statisch verbinden?

+0

Ja, Sie müssen OpenSSL für Boost installieren. Wollen Sie OpenSSL + Boost verwenden, ohne es zu installieren (OpenSSL)? – Blacktempel

+0

Sie müssen weitere Informationen bereitstellen, z. B. wie Sie Boost konfiguriert und erstellt haben und wie Sie Ihr Programm erstellen. Siehe auch [Boost Asio und OpenSSL 1.1.0] (http://stackoverflow.com/q/37517730), [VS2015 build openssl mit boost asio] (http: // stackoverflow.com/q/39032716) und [Problem 12238: Boost kann nicht mit OpenSSL 1.1.0 kompiliert werden] (https://svn.boost.org/trac/boost/ticket/12238). – jww

+0

Korrigieren ,, Ich möchte eine ausführbare Datei machen, die Client ermöglicht zu kommunizieren, ohne OpenSSL auf Client-Seite installieren @Blacktempel –

Antwort

1

can I statically bind OpenSSL with my application in a single executable?

Ja. Sie können openssl mit der no-shared Option bauen und es wird nur eine statische Bibliothek bauen:

https://wiki.openssl.org/index.php/Compilation_and_Installation

und dann einfach das statische Archiv auf Ihrer Link-Befehlszeile, und es wird statisch gelinkt werden - aber die Menschen, die Sie verteilen es nicht zu tun.

Um jedoch das Programm zu verknüpfen, müssen Sie die Header-Dateien und die statische Bibliothek für Ihren Compiler/Linker verfügbar haben.

1

boost::asio verwendet OpenSSL für SSL Buchsen: wenn Sie:

#include <boost/asio/ssl.hpp> 

in Ihrem Code, dann müssen Sie mit OpenSSL sowie boost bauen.

mit OpenSSL bauen:

  • das Makro BOOST_NETWORK_ENABLE_HTTPS auf Projektebene zu definieren;
  • fügen Sie das OpenSSL Include-Verzeichnis zu Ihrem Include-Pfad hinzu;
  • fügen Sie das Bibliotheksverzeichnis OpenSSL Ihrem Bibliothekspfad hinzu, z. -L$${OPENSSL_ROOT}/lib;
  • die entsprechenden Verschlüsselungsbibliotheken für Ihren Compiler hinzuzufügen, zum Beispiel:

Windows Visual Studio:

LIBS += -llibeay32 
LIBS += -llibssleay32 

Windows MinGW:

LIBS += -lssl 
LIBS += -lcrypto 

Linux, GCC:

LIBS += -lssl 
LIBS += -lcrypto 
LIBS += -ldl 

Hinweis: Möglicherweise haben Sie Verbindungsprobleme mit der Bibliotheksreihenfolge. Ich empfehle, die OpenSSL Bibliotheken nach den boost Bibliotheken einzuschließen; BTW boost::asio erfordert libboost_system.

+0

für Windows auch Verbindung mit crypt32.lib –