Re: [Quickfix-developers] crash when upgrade to 1.9.4
Brought to you by:
orenmnero
|
From: Caleb E. <cal...@gm...> - 2005-06-16 22:02:24
|
On 6/16/05, Sean Kirkpatrick <Sea...@pi...> wrote:
> We are currently in the process of QAing a release in which we will be
> upgrading our production version of quickfix from 1.7.0 to 1.9.4. When r=
un on:=20
>=20
> Linux 2.4.9-e.3 #1 Fri May 3 17:02:43 EDT 2002 i686=20
>=20
> our fix engine crashes whenever a FieldNotFound exception is thrown. The
> strange thing is that when the same binaries are used on my=20
>=20
> Linux 2.4.21-27.0.1.ELsmp #1 SMP Mon Dec 20 18:47:45 EST 2004 i68=
6
> i686 i386 GNU/Linux=20
>=20
> server, the exception is caught as expected. Has anyone seen similar
> behavior? It definitely seems to indicate that there is some incompatibi=
lity, but I'm not
> sure where...=20
I've seen similar behavior when using incompatible versions of the GCC
runtime library libgcc_s.so.1 (e.g. different GCC versions on the
machine you compiled on and the libraries installed on the one you're
running on)
I'm not sure entirely what is in that library, but the exception
handling code seems to be part of it. You ought to be able to verify
this with a simple test program that you compile on the newer machine
and run on the older one. Something like:
simplethrow.cpp:
#include <stdexcept>
int main () {
try { throw std::runtime_error ("Boom!") }
catch (std::runtime_error) { return 0; }
return 1;
}
% g++ -g -o simplethrow simplethrow.cpp
The program should exit cleanly with status 0:
% ( ./simplethrow && echo w00t ) || echo uh-oh
w00t
You can likely work around the problem by putting a copy of the newer
libgcc_s.so.1 (run ldd on your executable on the NEWER machine to find
where it lives - probably /lib) into the directory where your QuickFIX
.so lives, and ensuring this directory appears in your LD_LIBRARY_PATH
before the directory where the system version lives.
--=20
Caleb Epstein
caleb dot epstein at gmail dot com
|