Compiling the quickfix program

I am trying to use the fastfix library to connect to a broker using the FIX protocol. I just built a library using the documentation they provided and am currently using my example code

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

      

However, when I try to compile it with:

g++ fix.cpp -fexceptions -finline-functions -lquickfix -lpthread -lxml2

      

I am getting a bunch of errors:

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 functionvoid FIX::DataDictionaryProvider::addTransportDataDictionary(const FIX::BeginString&, const string&)’:
/usr/local/include/quickfix/DataDictionaryProvider.h:58:45: error: ‘shared_ptris not a member ofptr{ 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 functionvoid FIX::DataDictionaryProvider::addApplicationDataDictionary(const FIX::ApplVerID&, const string&)’:
/usr/local/include/quickfix/DataDictionaryProvider.h:60:45: error: ‘shared_ptris not a member ofptr{ 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 functionint main(int, char**)’:
fix.cpp:19:5: error: ‘MyApplicationwas 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

      

What am I doing wrong?

+3


source to share


2 answers


You need to provide a class implementation MyApplication

and compile the appropriate C ++ 11 flags.

Typically your object MyApplication

should derive from a class FIX::Application

which is a pure virtual class and you will need to implement a number of methods such as onLogon(...)

andtoApp(...)



If you just want to get your code to compile as a first step, you can try using the class FIX::NullApplication

(defined in quickfix / Application.h) as your application source object.

0


source


The quick fix library must be compiled with this preprocessor directive HAVE_STD_UNIQUE_PTR



Your application must provide an implementation for the MyApplication class, and this implementation must inherit from FIX :: Application

0


source







All Articles