Цель:
Собрать программу Acceptor (сервер). Когда это будет завершено, затем скомпилируйте инициатор (клиент), чтобы затем распечатать простой вывод, чтобы подтвердить, что два приложения взаимодействуют друг с другом (требования, которые я прочитал в документации QuickFix и в основном понимаю).
Обратите внимание перед публикацией этого вопроса, что мы проконсультировались со списком рассылки QuickFix и SO. Вопрос с похожими проблемами можно найти по следующему URL-адресу, однако ответы по-прежнему вызывают у меня некоторую путаницу: Компиляция программы быстрого исправления
Проблема:
При попытке скомпилировать следующий образец программы Acceptor, точно скопированный с http://www.quickfixengine.org/quickfix/doc/html/application.html, появлялись различные ошибки, как показано ниже. Команда компиляции, которую я использовал, была:
g++ trade_server_test.cpp -std=c++11 -fexceptions -finline-functions -lquickfix -lpthread -lxml2
Программа:
#include "quickfix/FileStore.h"
#include "quickfix/FileLog.h"
#include "quickfix/SocketAcceptor.h"
#include "quickfix/Session.h"
#include "quickfix/SessionSettings.h"
#include "quickfix/Application.h"
int main( int argc, char** argv )
{
try
{
if(argc < 2) return 1;
std::string fileName = argv[1];
FIX::SessionSettings settings(fileName);
MyApplication application;
FIX::FileStoreFactory storeFactory(settings);
FIX::FileLogFactory logFactory(settings);
FIX::SocketAcceptor acceptor
(application, storeFactory, settings, logFactory /*optional*/);
acceptor.start();
// while( condition == true ) { do something; }
acceptor.stop();
return 0;
}
catch(FIX::ConfigError& e)
{
std::cout << e.what();
return 1;
}
}
Выходы ошибок
Наблюдаются следующие ошибки:
trade_server_test.cpp: In function ‘int main(int, char**)’:
trade_server_test.cpp:17:3: error: ‘MyApplication’ was not declared in this scope
MyApplication application;
^~~~~~~~~~~~~
trade_server_test.cpp:21:6: error: ‘application’ was not declared in this scope
(application, storeFactory, settings, logFactory /*optional*/);
Затем я изменил имя объекта с "MyApplication"
на "Application"
и получил следующие выходные данные об ошибках. Класс приложения определен в заголовочном файле Application.h
. Компилятор распознает все включенные файлы заголовков, поэтому я не понимаю, почему он говорит, что приложение не объявлено в этой области.
trade_server_test.cpp: In function ‘int main(int, char**)’:
trade_server_test.cpp:17:3: error: ‘Application’ was not declared in this scope
Application application;
^~~~~~~~~~~
trade_server_test.cpp:17:3: note: suggested alternative:
In file included from /usr/local/include/quickfix/Acceptor.h:29:0,
from /usr/local/include/quickfix/SocketAcceptor.h:29,
from trade_server_test.cpp:3:
/usr/local/include/quickfix/Application.h:43:7: note: ‘FIX::Application’
class Application
^~~~~~~~~~~
trade_server_test.cpp:21:6: error: ‘application’ was not declared in this scope
(application, storeFactory, settings, logFactory /*optional*/);
^~~~~~~~~~~
Изменение объекта снова с "Application"
на "FIX::NullApplication"
избавляет от вышеуказанных ошибок, но затем появляется новая ошибка:
/usr/bin/ld: cannot find -lxml2
collect2: error: ld returned 1 exit status
Я успешно загрузил и собрал QuickFix 1.15.1
на Ubuntu 18.04.2 LTS
и смог запустить некоторые примеры приложений, например. OrderMatch
и TradeClient
(хотя и с частичной функциональностью), выполнив следующую процедуру:
% tar xvzf quickfix-1.15.1.tar.gz
% cd quickfix
% ./bootstrap
% ./configure
% make
% sudo make install
Сводные вопросы
- Как мне успешно скомпилировать пример программы Acceptor на
Ubuntu 18.04.2 LTS
дляQuickFix 1.15.1
? Пошаговое руководство будет высоко оценено с точки зрения того, какие библиотеки связать, заголовочные файлы для компиляции с какими флагами и т. д. - Команда для компиляции кажется правильной?
- Должен ли какой-либо из файлов заголовков компилироваться вместе с этим приложением (хотя я думал, что они были скомпилированы, когда
make
запускался во время процессаbuilding
?
FIX::Application
, вы должны создать этот подкласс. - person Botje   schedule 29.07.2020