Financial Information eXchange or in short FIX, is an application layer protocol, adopted by a lot of organizations for financial information exchange. Refer, FIX Protocol for references.
I was introduced to it, in October, and a months work went into integrating FIX initiator application, to communicate with FIX gateways implemented by various Brokers. I struggled a bit, since there wasn't a straight forward documentation, to some developer level faqs. More so, because, I was writing a custom implementation for a broker (name cannot be disclosed), who is supposed to have the best FIX gateway among the US Brokers (ofcourse among those, who have adopted FIX).
During development, I was using g++-4.2 version, and I didn't have issues with compiling quickfix. Today, I was trying to deploy the application in my office laptop (for testing), with a fresh ubuntu installation, with g++-4.3. Compiling quickfix gave error like:
../Utility.h:179: error: 'std::strcmp' has not been declared ../Utility.h:181: error: 'std::strlen' has not been declared ../Utility.h:184: error: 'std::memcpy' has not been declared ../Utility.h:185: error: 'std::memset' has not been declared ../Utility.h:189: error: 'std::strerror' has not been declared
I searched further and found this link. I was surprised. I saw this document on porting issues to gcc 4.3.
In the office, I have always been skeptical about using third party software, and try to follow some simple check list before adopting to one of those.
- Use if the software is well documented, with reference to existing bugs, reliability and performance issues.
- Don't use the software, if it is not being maintained for more than last 6 months.
- Avoid using application level frameworks, which is heavy weight and try to abstract a lot of programming constructs.
- See business perspective, as in if a GPL licensed software is used, then what will happen to business, when you are distributing the software.
- Use the software, if time to market is minimal.
- Use it if you cannot think of writing the same piece of software in the near future (for e.g: the linux kernel or gcc compiler.)
Hi.
I have the same problem. I am running Ubuntu 8.10. I had a look at the links in your post. However I am still not sure what is wrong. It appears from my limited understanding that the C++ header files or something changed which caused a compatibility issue.
Could you perhaps help me a little more if you have found the cause to the problem?
Thanks
Neil
*Nix Converted 09!
Posted by: Neil | February 22, 2009 at 05:59 PM
Neil,
Add 2 headers in src/C++/Utility.h
`cstring` and `cstdlib`.
And do not add `.h`.
This worked for me.
Posted by: Hiran Ramankutty | February 22, 2009 at 06:38 PM
Hi Hiran
Yeah I figured the cstring and cstdlib problem out after reading your posts. Very helpfull thanks. I am now experiencing problems with mysql.h files. I copied them from my /usr/include directory to the c++ directory. However there is still a problem.
I am busy with some product rollouts will get back to you if needs be.
Thanks for the help
Nei
Posted by: Neil | February 23, 2009 at 06:48 PM
Hi Hiran
Thanks for the pointers so far. I got Quickfix to compile with mysql support. I did however stumble into a new problem. I would like to use it with java. When I include the --with-java option during the make process I get the following error: error: jni.h: No such file or directory. I am running Ubuntu 8.10 Intrepid. When I do a locate jni.h I do find the file but it is under a openjava-sdk folder. I suspect that QuickFix is looking for the proper aka Sun java class files under a different directory and this is causing me problems. I tried installing the Sun JAva SDK but it seems like the Ubuntu repository mirrors are down here in sunny old South Africa.
So my question is (sorry I am a newbie) how would I get Quickfix to use the openjava sdk or do I need to get the Sun Java SDK. Once again I appreciate all your help.
Or how do I add the openjava sdk to the system PATHS so it can find the jni.h file? Like I said I can do it on windows( a habit I am trying to get rid of) but have no idea on how to do it on *Nix!
Regards
Neil
Posted by: Neil | March 01, 2009 at 02:13 PM
check if the environment variable `JAVA_HOME` (echo $JAVA_HOME) is set. I am using the Sun Java sdk and in my system JAVA_HOME is set as
`/usr/lib/jvm/java-6-sun`
I have not tried with open java sdk, and not sure also, whether it will work with it or not.
May be you can try setting the environment variable like:
export JAVA_HOME=
and try it out.
Let me see if it works with open java or not.
Posted by: Hiran Ramankutty | March 01, 2009 at 02:47 PM
Hi Hiran
Major thanks for all the help so far.I got quickfix compiled and running. JAva support is enabled. Just trying to figure out how to get the quickfix packages imported into NetBeans so I can start using it.
Hiran if you are ever in South Africa give me a shout I would definately show you around. I am trying to start a business implementing FIX here in SA and you have helped me with the first step. Thanks so much for the help.
Kind Regards
Neil
Posted by: Neil | March 02, 2009 at 12:42 PM
Dear Neil,
First of all congratulations on getting `quickfix` compiled and second of having migrated to Linux. Hope you have lots of fun learning.
Thanks for your offer on showing me around South Africa.
All the best in your business initiatives.
Posted by: Hiran Ramankutty | March 04, 2009 at 10:00 AM