Реализация SSL в приложении VC ++ MFC с QuickFIX - PullRequest
0 голосов
/ 14 февраля 2019

Я использую quickfix lib с 64-битным приложением VC ++ MFC, все работает нормально.Теперь я хочу использовать ThreadedSSLSocketAcceptor, который я сделал со следующим:

  1. скачал скомпилированный openssl-1.0.2l-vs2015.7z [md5] [отсюда] 1
  2. Добавлены все необходимые 64-битные заголовочные файлы openssl.
  3. определяют HAVE_SSL 1
  4. связывают 64-битные библиотеки openssl с приложением [ssleay32MDd.lib, libeay32MDd].

Тем не менее я получаю следующую ошибку компоновки:

Severity    Code    Description Project File    Line    Suppression State
Error   LNK2028 unresolved token (0A0026BF) "public: __cdecl FIX::SSLSocketAcceptor::SSLSocketAcceptor(class FIX::Application &,class FIX::MessageStoreFactory &,class FIX::SessionSettings const &,class FIX::LogFactory &)" (??0SSLSocketAcceptor@FIX@@$$FQEAA@AEAVApplication@1@AEAVMessageStoreFactory@1@AEBVSessionSettings@1@AEAVLogFactory@1@@Z) referenced in function "int __cdecl StartExecutor(void *)" (?StartExecutor@@$$FYAHPEAX@Z)   OFI_FIX_Executor    D:\FIX\RRM_FIX\FIX_RRM(final)\FIXServer\OFI_FIX_Executor\OFI_FIX_Executor\OFI_FIX_ExecutorDlg.obj   1   

Severity    Code    Description Project File    Line    Suppression State
Error   LNK2028 unresolved token (0A0026C0) "public: __cdecl FIX::ThreadedSSLSocketAcceptor::ThreadedSSLSocketAcceptor(class FIX::Application &,class FIX::MessageStoreFactory &,class FIX::SessionSettings const &,class FIX::LogFactory &)" (??0ThreadedSSLSocketAcceptor@FIX@@$$FQEAA@AEAVApplication@1@AEAVMessageStoreFactory@1@AEBVSessionSettings@1@AEAVLogFactory@1@@Z) referenced in function "int __cdecl StartExecutor(void *)" (?StartExecutor@@$$FYAHPEAX@Z)   OFI_FIX_Executor    D:\FIX\RRM_FIX\FIX_RRM(final)\FIXServer\OFI_FIX_Executor\OFI_FIX_Executor\OFI_FIX_ExecutorDlg.obj   1   

Severity    Code    Description Project File    Line    Suppression State
Error   LNK2019 unresolved external symbol "public: __cdecl FIX::ThreadedSSLSocketAcceptor::ThreadedSSLSocketAcceptor(class FIX::Application &,class FIX::MessageStoreFactory &,class FIX::SessionSettings const &,class FIX::LogFactory &)" (??0ThreadedSSLSocketAcceptor@FIX@@$$FQEAA@AEAVApplication@1@AEAVMessageStoreFactory@1@AEBVSessionSettings@1@AEAVLogFactory@1@@Z) referenced in function "int __cdecl StartExecutor(void *)" (?StartExecutor@@$$FYAHPEAX@Z)    OFI_FIX_Executor    D:\FIX\RRM_FIX\FIX_RRM(final)\FIXServer\OFI_FIX_Executor\OFI_FIX_Executor\OFI_FIX_ExecutorDlg.obj   1   


Severity    Code    Description Project File    Line    Suppression State
Error   LNK2019 unresolved external symbol "public: __cdecl FIX::SSLSocketAcceptor::SSLSocketAcceptor(class FIX::Application &,class FIX::MessageStoreFactory &,class FIX::SessionSettings const &,class FIX::LogFactory &)" (??0SSLSocketAcceptor@FIX@@$$FQEAA@AEAVApplication@1@AEAVMessageStoreFactory@1@AEBVSessionSettings@1@AEAVLogFactory@1@@Z) referenced in function "int __cdecl StartExecutor(void *)" (?StartExecutor@@$$FYAHPEAX@Z)    OFI_FIX_Executor    D:\FIX\RRM_FIX\FIX_RRM(final)\FIXServer\OFI_FIX_Executor\OFI_FIX_Executor\OFI_FIX_ExecutorDlg.obj   1

Требуется ли дополнительная библиотека или DLL?

1 Ответ

0 голосов
/ 14 февраля 2019

Вам необходимо перестроить Quickfix с помощью SSL:

  1. Раскомментировать #define HAVE_SSL 1 в src/config_windows.h
  2. Вызвать cmake -S . -DHAVE_SSL=1 (вам может потребоваться установить OPENSSL_ROOT_DIR env var всначала путь OpenSSL, например set OPENSSL_ROOT_DIR=C:\openssl-1.1.0f-vs2015\) из каталога быстрого исправления
  3. Call msbuild quickfix.sln

Затем вы сможете создать пример приложения (просто добавьте src\C++\release\quickfix.lib в настройках компоновщика):

#define HAVE_SSL 1
#include <quickfix/SSLSocketAcceptor.h>

int main()
{
    FIX::NullApplication app{};
    FIX::MemoryStoreFactory factory{};
    FIX::SessionSettings settings{};
    FIX::SSLSocketAcceptor acceptor{ app, factory, settings };
}
...