使用Visual Studio 2010和OpenSSL提升SSL

Dav*_*d D 5 boost openssl visual-studio-2010

我正在尝试编译Boost 1.47 ASIO SSL服务器和客户端示例.我可以成功地将Boost整合到我的项目中,但我无法合并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 " (?message@ssl_category@detail@error@asio@boost@@UBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z)
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)" (??0do_init@openssl_init_base@detail@ssl@asio@boost@@QAE@XZ)
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)" (??0do_init@openssl_init_base@detail@ssl@asio@boost@@QAE@XZ)
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)" (??0do_init@openssl_init_base@detail@ssl@asio@boost@@QAE@XZ)
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)" (??0do_init@openssl_init_base@detail@ssl@asio@boost@@QAE@XZ)
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)" (??0do_init@openssl_init_base@detail@ssl@asio@boost@@QAE@XZ)
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)" (??1do_init@openssl_init_base@detail@ssl@asio@boost@@QAE@XZ)
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)" (??1do_init@openssl_init_base@detail@ssl@asio@boost@@QAE@XZ)
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)" (??1do_init@openssl_init_base@detail@ssl@asio@boost@@QAE@XZ)
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)" (??1do_init@openssl_init_base@detail@ssl@asio@boost@@QAE@XZ)
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)" (??1do_init@openssl_init_base@detail@ssl@asio@boost@@QAE@XZ)
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)" (??1do_init@openssl_init_base@detail@ssl@asio@boost@@QAE@XZ)
1>C:\Users\Epicism\Documents\Visual Studio 2010\Projects\SSLServer\Debug\SSLServer.exe : fatal error LNK1120: 12 unresolved externals
1>
1>Build FAILED.
Run Code Online (Sandbox Code Playgroud)

我尝试添加目录C:\ OpenSSL-Win32\lib \,C:\ OpenSSL-Win32\lib\VC \,C:\ OpenSSL-Win32\lib\VC\static,C:\ OpenSSL-Win32\bin,使用openssl预编译库(http://www.openssl.org/related/binaries.html)将C:\ OpenSSL-Win32\include包含到Project-> General Properties-> Linker-> Additional Library Directories.我也尝试用相同的错误自己编译OpenSSL.我真的很茫然,我已经尝试过我搜索过Google一千次,试过IRC,我能想到的每个目录组合......

我的设置是:Windows 7 64位Windows Visual Studio 2010 64位Boost 1.47 OpenSSL 1.0.0E和GC/C++其他包含目录:C:\ Program Files(x86)\ boost\boost_1_47; C:\ openssl\include \; C:\ OpenSSL-Win32\lib;%(AdditionalIncludeDirectories)项目 - >常规属性 - >链接器 - >其他库目录:C:\ Program Files(x86)\ boost\boost_1_47\lib; C:\ openssl\lib; C :\ openssl;%(AdditionalLibraryDirectories) - 我已经尝试将每个目录添加到此属性....

现在我只是想在VS C++控制台项目中编译以下内容:

// SSLServer.cpp:定义控制台应用程序的入口点.//

#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;
}
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Fra*_*ser 10

看起来你在64位机器上使用32位版本的OpenSSL.

尝试从http://www.slproweb.com/products/Win32OpenSSL.html下载64位版本(Win64 OpenSSL v1.0.0g)

安装完成后(如果使用默认路径),您应该有一个C:\OpenSSL-Win64文件夹.

你应该添加:

  • C:\OpenSSL-Win64\include 到您的附加包含目录
  • C:\OpenSSL-Win64\lib\VC\static或者C:\OpenSSL-Win64\lib\VC您的附加库目录,具体取决于您是否分别需要静态库或dll
  • libeay32<XXX>.lib以及与您拥有的任何设置匹配的ssleay32<XXX>.lib附加依赖项<XXX>[C/C++]->[Code Generation]->[Runtime Library]