问题描述
我正在尝试编译 Boost 1.47 ASIO SSL 服务器和客户端示例.我可以成功地将 Boost 合并到我的项目中,但我不能合并 OpenSSL.当我尝试添加它时,出现错误:
I'm trying to compile the Boost 1.47 ASIO SSL server and client examples. I can sucessfully incorporate Boost into my project, but I cannot incorporate OpenSSL. When I try to add it I get the errors:
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:UsersEpicismDocumentsVisual Studio 2010ProjectsSSLServerDebugSSLServer.exe : fatal error LNK1120: 12 unresolved externals
1>
1>Build FAILED.
我尝试添加目录 C:OpenSSL-Win32lib, C:OpenSSL-Win32libVC, C:OpenSSL-Win32libVCstatic, C:OpenSSL-Win32in, C:OpenSSL-Win32include 到 Project->General Properties->Linker->Additional Library Directories 使用 openssl 预编译库 (http://www.openssl.org/related/binaries.html).我也尝试过自己编译 OpenSSL 时遇到相同的错误.我真的不知所措,我已经尝试了我在谷歌上搜索过的所有东西大约一千次,尝试了 IRC,我能想到的所有目录组合......
I have tried adding the directory C:OpenSSL-Win32lib, C:OpenSSL-Win32libVC, C:OpenSSL-Win32libVCstatic, C:OpenSSL-Win32in, C:OpenSSL-Win32include to Project->General Properties->Linker->Additional Library Directories using the openssl pre-compiled libraries (http://www.openssl.org/related/binaries.html). I have also tried compiling OpenSSL myself with the same errors. I'm really at a loss, I have tried everything I have searched Google about a thousand times, tried IRC, every combination of directories I can think of...
我的设置是:视窗 7 64 位视窗 Visual Studio 2010 64 位提升 1.47OpenSSL 1.0.0E 和 GC/C++ 附加包含目录:C:Program Files (x86)oostoost_1_47;C:opensslinclude;C:OpenSSL-Win32lib;%(AdditionalIncludeDirectories)项目->通用属性->链接器->附加库目录:C:Program Files (x86)oostoost_1_47lib;C:openssllib;C:openssl;%(AdditionalLibraryDirectories)- 我也尝试将每个目录添加到此属性中....
My setup is:Windows 7 64-bitWindows Visual Studio 2010 64 bitBoost 1.47OpenSSL 1.0.0E and GC/C++ Additional Include Directories: C:Program Files (x86)oostoost_1_47;C:opensslinclude;C:OpenSSL-Win32lib;%(AdditionalIncludeDirectories)Project->General Properties->Linker->Additional Library Directories: C:Program Files (x86)oostoost_1_47lib;C:openssllib;C:openssl;%(AdditionalLibraryDirectories) - I've tried adding every directory to this property as well....
现在我只是想在 VS C++ 控制台项目中编译以下内容:
Right now I'm just trying to compile the following in a VS C++ console project:
//SSLServer.cpp : 定义控制台应用程序的入口点.//
// SSLServer.cpp : Defines the entry point for the console application.//
#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;
}
提前致谢.
推荐答案
看起来您正在 64 位机器上使用 32 位版本的 OpenSSL.
Looks like you're using the 32-bit version of OpenSSL on a 64-bit machine.
尝试从 http://下载 64 位版本 (Win64 OpenSSL v1.0.0g)www.slproweb.com/products/Win32OpenSSL.html
安装后(如果您使用默认路径),您应该有一个 C:OpenSSL-Win64
文件夹.
After that's installed (if you use default paths), you should have a C:OpenSSL-Win64
folder.
您应该添加:
C:OpenSSL-Win64include
到您的附加包含目录C:OpenSSL-Win64libVCstatic
或C:OpenSSL-Win64libVC
到您的附加库目录,具体取决于您是否需要分别是静态库或 dlllibeay32.lib
和ssleay32.lib
到附加依赖项,其中匹配您拥有的任何设置for
[C/C++]->[代码生成]->[运行库]
C:OpenSSL-Win64include
to your Additional Include DirectoriesC:OpenSSL-Win64libVCstatic
orC:OpenSSL-Win64libVC
to your Additional Library Directories depending on whether you want the static libs or the dlls respectivelylibeay32<XXX>.lib
andssleay32<XXX>.lib
to Additional Dependencies where<XXX>
matches whatever setting you have for[C/C++]->[Code Generation]->[Runtime Library]
这篇关于使用 Visual Studio 2010 和 OpenSSL 提升 SSL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!