编译quickfix程序

时间:2015-05-20 19:25:22

标签: c++ quickfix

我正在尝试使用quickfix库使用FIX协议连接到代理。我刚刚使用他们提供的文档构建了库,并立即使用他们的示例代码

#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;
  }
}

然而,当我尝试用:

编译它时
g++ fix.cpp -fexceptions -finline-functions -lquickfix -lpthread -lxml2

我收到了一堆错误:

In file included from /usr/local/include/quickfix/Session.h:34:0,
                 from fix.cpp:6:
/usr/local/include/quickfix/DataDictionaryProvider.h:54:72: error: ‘ptr::shared_ptr’ has not been declared
   void addTransportDataDictionary(const BeginString& beginString, ptr::shared_ptr<DataDictionary>);
                                                                        ^
/usr/local/include/quickfix/DataDictionaryProvider.h:54:82: error: expected ‘,’ or ‘...’ before ‘<’ token
   void addTransportDataDictionary(const BeginString& beginString, ptr::shared_ptr<DataDictionary>);
                                                                                  ^
/usr/local/include/quickfix/DataDictionaryProvider.h:55:70: error: ‘ptr::shared_ptr’ has not been declared
   void addApplicationDataDictionary(const ApplVerID& applVerID, ptr::shared_ptr<DataDictionary>);
                                                                      ^
/usr/local/include/quickfix/DataDictionaryProvider.h:55:80: error: expected ‘,’ or ‘...’ before ‘<’ token
   void addApplicationDataDictionary(const ApplVerID& applVerID, ptr::shared_ptr<DataDictionary>);
                                                                                ^
/usr/local/include/quickfix/DataDictionaryProvider.h:63:25: error: ‘shared_ptr’ is not a member of ‘ptr’
   std::map<std::string, ptr::shared_ptr<DataDictionary> > m_transportDictionaries;
                         ^
/usr/local/include/quickfix/DataDictionaryProvider.h:63:25: error: ‘shared_ptr’ is not a member of ‘ptr’
/usr/local/include/quickfix/DataDictionaryProvider.h:63:55: error: template argument 2 is invalid
   std::map<std::string, ptr::shared_ptr<DataDictionary> > m_transportDictionaries;
                                                       ^
/usr/local/include/quickfix/DataDictionaryProvider.h:63:55: error: template argument 4 is invalid
/usr/local/include/quickfix/DataDictionaryProvider.h:63:57: error: expected unqualified-id before ‘>’ token
   std::map<std::string, ptr::shared_ptr<DataDictionary> > m_transportDictionaries;
                                                         ^
/usr/local/include/quickfix/DataDictionaryProvider.h:64:25: error: ‘shared_ptr’ is not a member of ‘ptr’
   std::map<std::string, ptr::shared_ptr<DataDictionary> > m_applicationDictionaries;
                         ^
/usr/local/include/quickfix/DataDictionaryProvider.h:64:25: error: ‘shared_ptr’ is not a member of ‘ptr’
/usr/local/include/quickfix/DataDictionaryProvider.h:64:55: error: template argument 2 is invalid
   std::map<std::string, ptr::shared_ptr<DataDictionary> > m_applicationDictionaries;
                                                       ^
/usr/local/include/quickfix/DataDictionaryProvider.h:64:55: error: template argument 4 is invalid
/usr/local/include/quickfix/DataDictionaryProvider.h:64:57: error: expected unqualified-id before ‘>’ token
   std::map<std::string, ptr::shared_ptr<DataDictionary> > m_applicationDictionaries;
                                                         ^
/usr/local/include/quickfix/DataDictionaryProvider.h: In member function ‘void FIX::DataDictionaryProvider::addTransportDataDictionary(const FIX::BeginString&, const string&)’:
/usr/local/include/quickfix/DataDictionaryProvider.h:58:45: error: ‘shared_ptr’ is not a member of ‘ptr’
   { addTransportDataDictionary(beginString, ptr::shared_ptr<DataDictionary>( new DataDictionary(path) )); }
                                             ^
/usr/local/include/quickfix/DataDictionaryProvider.h:58:75: error: expected primary-expression before ‘>’ token
   { addTransportDataDictionary(beginString, ptr::shared_ptr<DataDictionary>( new DataDictionary(path) )); }
                                                                           ^
/usr/local/include/quickfix/DataDictionaryProvider.h: In member function ‘void FIX::DataDictionaryProvider::addApplicationDataDictionary(const FIX::ApplVerID&, const string&)’:
/usr/local/include/quickfix/DataDictionaryProvider.h:60:45: error: ‘shared_ptr’ is not a member of ‘ptr’
   { addApplicationDataDictionary(applVerID, ptr::shared_ptr<DataDictionary>( new DataDictionary(path) )); }
                                             ^
/usr/local/include/quickfix/DataDictionaryProvider.h:60:75: error: expected primary-expression before ‘>’ token
   { addApplicationDataDictionary(applVerID, ptr::shared_ptr<DataDictionary>( new DataDictionary(path) )); }
                                                                           ^
fix.cpp: In function ‘int main(int, char**)’:
fix.cpp:19:5: error: ‘MyApplication’ was not declared in this scope
     MyApplication application;
     ^
fix.cpp:19:19: error: expected ‘;’ before ‘application’
     MyApplication application;
                   ^
fix.cpp:23:8: error: ‘application’ was not declared in this scope
       (application, storeFactory, settings, logFactory /*optional*/);
        ^
root@luis:/home/luis/tradingbot/bot4#     In file included from /usr/local/include/quickfix/Session.h:34:0,
In: command not found
root@luis:/home/luis/tradingbot/bot4#                      from fix.cpp:6:
from: can't read /var/mail/fix.cpp:6:
root@luis:/home/luis/tradingbot/bot4#     /usr/local/include/quickfix/DataDictionaryProvider.h:54:72: error: ‘ptr::shared_ptr’ has not been declared
bash: /usr/local/include/quickfix/DataDictionaryProvider.h:54:72:: No such file or directory
root@luis:/home/luis/tradingbot/bot4#        void addTransportDataDictionary(const BeginString& beginString, ptr::shared_ptr<DataDictionary>);
bash: syntax error near unexpected token `('
root@luis:/home/luis/tradingbot/bot4#                                                                             ^
^: command not found
root@luis:/home/luis/tradingbot/bot4#     /usr/local/include/quickfix/DataDictionaryProvider.h:54:82: error: expected ‘,’ or ‘...’ before ‘<’ token
bash: ’: No such file or directory
root@luis:/home/luis/tradingbot/bot4#        void addTransportDataDictionary(const BeginString& beginString, ptr::shared_ptr<DataDictionary>);
bash: syntax error near unexpected token `('
root@luis:/home/luis/tradingbot/bot4#                                                                                       ^
^: command not found
root@luis:/home/luis/tradingbot/bot4#     /usr/local/include/quickfix/DataDictionaryProvider.h:55:70: error: ‘ptr::shared_ptr’ has not been declared
bash: /usr/local/include/quickfix/DataDictionaryProvider.h:55:70:: No such file or directory

我做错了什么?

2 个答案:

答案 0 :(得分:0)

您需要提供MyApplication类的实现,并使用适当的C ++ 11标志进行编译。

您的MyApplication对象通常需要从FIX::Application类派生,该类是纯虚拟类,并且需要您实现一系列方法,例如onLogon(...)和{{1} }

如果您只想将代码编译为第一步,可以尝试使用toApp(...)类(在quickfix / Application.h中定义)作为起始应用程序对象。

答案 1 :(得分:0)

必须使用此预处理程序指令HAVE_STD_UNIQUE_PTR

编译quickfix库。

您的应用程序必须为MyApplication类提供一个实现,并且该实现必须继承自FIX :: Application