Повышение SSL с помощью Visual Studio 2010 и OpenSSL - PullRequest
5 голосов
/ 20 февраля 2012

Я пытаюсь скомпилировать примеры сервера и клиента ASIO SSL Boost 1.47. Я могу успешно включить 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.

Я попытался добавить каталог C: \ OpenSSL-Win32 \ lib \, C: \ OpenSSL-Win32 \ lib \ VC \, C: \ OpenSSL-Win32 \ lib \ VC \ static, C: \ OpenSSL-Win32 \ bin, C: \ OpenSSL-Win32 \ include to Project-> Общие свойства-> Linker-> Дополнительные каталоги библиотек с использованием предварительно скомпилированных библиотек openssl (http://www.openssl.org/related/binaries.html). Я также пытался сам скомпилировать OpenSSL с теми же ошибками. I ' Я действительно в растерянности, я перепробовал все, что искал в Google около тысячи раз, пробовал IRC, каждую комбинацию каталогов, о которой я могу подумать ...

Моя настройка: Windows 7 64-битная Windows Visual Studio 2010 64 бит Boost 1.47 OpenSSL 1.0.0E и G C / 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;
}

Заранее спасибо.

Ответы [ 3 ]

10 голосов
/ 21 февраля 2012

Похоже, вы используете 32-разрядную версию OpenSSL на 64-разрядной машине.

Попробуйте загрузить 64-разрядную версию (Win64 OpenSSL v1.0.0g) из http://www.slproweb.com/products/Win32OpenSSL.html

После установки (если вы используете пути по умолчанию) у вас должна быть папка 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]
3 голосов
/ 15 января 2013

Мне удалось собрать вашу маленькую программу, указанную выше, связав ее с 32-разрядной версией библиотеки Boost и 32-разрядной версией OpenSSL.Вам также понадобится 32-разрядная версия распространяемых файлов .Ошибка присутствует в Boost версий 1.51 и 1.52, которые являются единственными протестированными версиями.

Я считаю, что есть ошибка в 64-битной версии библиотеки ASIO.Хотя, возможно, это какая-то проблема конфигурации, которая затронула многих других.Я отправил отчет об ошибке Boost об этой проблеме.

0 голосов
/ 06 августа 2015

Я встречался с подобной проблемой (VS2010) , решенные методы:

1) Свойства-> C / C ++ -> общие-> дополнительные каталоги включения: yourpath \ boost_1_58_0 \ boost_1_58_0 (я использую 1.58.0версия)

2) Свойства-> Линкер -> общие-> дополнительные каталоги библиотеки: yourpath \ boost_1_58_0 \ boost_1_58_0 \ stage \ lib

3) Свойства-> Линкер -> Ввод -> дополнительныеЗависимости: libeay32.lib ssleay32.lib

Эти два файла .lib скопированы из каталога установки openssl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...