2012-02-20 11 views
5

Sto provando a compilare il server ASIO SSL Boost 1.47 e gli esempi di client. Posso integrare con successo Boost nel mio progetto, ma non posso incorporare OpenSSL. Quando provo ad aggiungerlo ricevo gli errori:Boost SSL con Visual Studio 2010 e OpenSSL

1>SSLServer.obj : error LNK2019: unresolved external symbol _ERR_reason_error_string referenced in function "public: virtual class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall boost::asio::error::detail::ssl_category::message(int)const " ([email protected][email protected]@[email protected]@[email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]) 
1>SSLServer.obj : error LNK2019: unresolved external symbol _CRYPTO_set_id_callback referenced in function "public: __thiscall boost::asio::ssl::detail::openssl_init_base::do_init::do_init(void)" ([email protected][email protected]@[email protected]@[email protected]@[email protected]) 
1>SSLServer.obj : error LNK2019: unresolved external symbol _CRYPTO_set_locking_callback referenced in function "public: __thiscall boost::asio::ssl::detail::openssl_init_base::do_init::do_init(void)" ([email protected][email protected]@[email protected]@[email protected]@[email protected]) 
1>SSLServer.obj : error LNK2019: unresolved external symbol _CRYPTO_num_locks referenced in function "public: __thiscall boost::asio::ssl::detail::openssl_init_base::do_init::do_init(void)" ([email protected][email protected]@[email protected]@[email protected]@[email protected]) 
1>SSLServer.obj : error LNK2019: unresolved external symbol _SSL_load_error_strings referenced in function "public: __thiscall boost::asio::ssl::detail::openssl_init_base::do_init::do_init(void)" ([email protected][email protected]@[email protected]@[email protected]@[email protected]) 
1>SSLServer.obj : error LNK2019: unresolved external symbol _SSL_library_init referenced in function "public: __thiscall boost::asio::ssl::detail::openssl_init_base::do_init::do_init(void)" ([email protected][email protected]@[email protected]@[email protected]@[email protected]) 
1>SSLServer.obj : error LNK2019: unresolved external symbol _ENGINE_cleanup referenced in function "public: __thiscall boost::asio::ssl::detail::openssl_init_base::do_init::~do_init(void)" ([email protected][email protected]@[email protected]@[email protected]@[email protected]) 
1>SSLServer.obj : error LNK2019: unresolved external symbol _CONF_modules_unload referenced in function "public: __thiscall boost::asio::ssl::detail::openssl_init_base::do_init::~do_init(void)" ([email protected][email protected]@[email protected]@[email protected]@[email protected]) 
1>SSLServer.obj : error LNK2019: unresolved external symbol _CRYPTO_cleanup_all_ex_data referenced in function "public: __thiscall boost::asio::ssl::detail::openssl_init_base::do_init::~do_init(void)" ([email protected][email protected]@[email protected]@[email protected]@[email protected]) 
1>SSLServer.obj : error LNK2019: unresolved external symbol _EVP_cleanup referenced in function "public: __thiscall boost::asio::ssl::detail::openssl_init_base::do_init::~do_init(void)" ([email protected][email protected]@[email protected]@[email protected]@[email protected]) 
1>SSLServer.obj : error LNK2019: unresolved external symbol _ERR_remove_state referenced in function "public: __thiscall boost::asio::ssl::detail::openssl_init_base::do_init::~do_init(void)" ([email protected][email protected]@[email protected]@[email protected]@[email protected]) 
1>SSLServer.obj : error LNK2019: unresolved external symbol _ERR_free_strings referenced in function "public: __thiscall boost::asio::ssl::detail::openssl_init_base::do_init::~do_init(void)" ([email protected][email protected]@[email protected]@[email protected]@[email protected]) 
1>C:\Users\Epicism\Documents\Visual Studio 2010\Projects\SSLServer\Debug\SSLServer.exe : fatal error LNK1120: 12 unresolved externals 
1> 
1>Build FAILED. 

Ho provato ad aggiungere la directory C: \ OpenSSL-Win32 \ lib \ C: \ OpenSSL-Win32 \ lib \ VC \ C: \ OpenSSL -Win32 \ lib \ VC \ static, C: \ OpenSSL-Win32 \ bin, C: \ OpenSSL-Win32 \ include in Project-> Proprietà generali-> Linker-> Directory di libreria aggiuntive utilizzando le librerie precompilate di openssl (http: //www.openssl.org/related/binaries.html). Ho anche provato a compilare OpenSSL con gli stessi errori. Sono davvero in perdita, ho provato tutto quello che ho cercato di Google circa un migliaio di volte, ha cercato IRC, ogni combinazione di directory che posso pensare ...

La mia configurazione è: Windows 7 64-bit Windows Visual Studio 2010 64 bit Boost 1.47 OpenSSL 1.0.0E e G C/C++ Directory di inclusione aggiuntive: C: \ Programmi (x86) \ boost \ boost_1_47; C: \ openssl \ include \; C: \ OpenSSL- Win32 \ lib;% (AdditionalIncludeDirectories) Progetto-> Proprietà generali-> Linker-> Directory di libreria aggiuntive: C: \ Programmi (x86) \ boost \ boost_1_47 \ lib; C: \ openssl \ lib; C: \ openssl; % (AdditionalLibraryDirectories) - Ho provato ad aggiungere ogni directory anche a questa proprietà ....

In questo momento mi sto solo cercando di compilare il seguente in un progetto di console VS C++:

// SSLServer.cpp: Definisce il punto di ingresso per l'applicazione di console. //

#include "stdafx.h" 
#include <cstdlib> 
#include <iostream> 
#include <boost/bind.hpp> 
#include <boost/asio.hpp> 
#include <boost/asio/ssl.hpp> 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    return 0; 
} 

Grazie in anticipo.

+0

SÌ anche io ho questo problema come bene – jzeus

+0

Ho anche questo problema. Qualcuno è riuscito a capirlo? Si prega di postare se lo fai. Ho provato il suggerimento di Fraser in basso, ma ho ancora il problema. –

risposta

10

Sembra che tu stia utilizzando la versione a 32 bit di OpenSSL su un computer a 64 bit.

Provare a scaricare la versione a 64-bit (Win64 OpenSSL v1.0.0g) da http://www.slproweb.com/products/Win32OpenSSL.html

Dopo che è installato (se si utilizza percorsi di default), si dovrebbe avere una cartella C:\OpenSSL-Win64.

Si dovrebbe aggiungere:

  • C:\OpenSSL-Win64\include al tuo aggiuntivi includono directory
  • C:\OpenSSL-Win64\lib\VC\static o C:\OpenSSL-Win64\lib\VC ai tuoi Ulteriori directory di libreria a seconda se si desidera che le librerie statiche o le DLL rispettivamente
  • libeay32<XXX>.lib e ssleay32<XXX>.lib a Dipendenze aggiuntive dove <XXX> corrisponde a qualsiasi impostazione per [C/C++]->[Code Generation]->[Runtime Library]
+0

Come si ottiene questo funzionamento con Visual Studio 2015 e Boost.Build, dalla riga di comando (ad esempio attraverso un Jamfile?) –

3

Sono riuscito a creare il tuo piccolo programma sopra descritto collegandomi alla versione a 32 bit della libreria Boost insieme alla versione a 32 bit di OpenSSL. Avrai anche bisogno della versione a 32 bit di redistributables. Il bug è presente nella versione Boost 1.51 e 1.52, che sono le uniche versioni che ho testato.

Credo che ci sia un bug nella versione a 64 bit della libreria ASIO. Sebbene, è possibile che si tratti di una sorta di problema di configurazione che ha colpito molti altri. Ho inviato una segnalazione di bug Boost sul problema.

0

ho incontrato il problema simile (VS2010), metodi risolti:

1) Proprietà-> C/C++ -> Generale-> supplementari includono directory: yourpath \ boost_1_58_0 \ boost_1_58_0 (io uso 1.58.0 versione)

2) Proprietà-> Linker -> Generale-> ulteriori directory di libreria: yourpath \ boost_1_58_0 \ boost_1_58_0 stadio \ lib

3) Proprietà-> Linker \ -> Input -> dipendenze addizionali: libeay32 .lib ssleay32.lib

Questi due file .lib vengono copiati dalla directory di installazione di openssl.