Boost logo

Boost Users :

Subject: Re: [Boost-users] [Boost.serialization] unexpected bad_cast exception while deserializing some arbitrary instances (e.g.: ar & data) ...
From: Francois Mauger (mauger_at_[hidden])
Date: 2009-05-28 10:50:07

Hi Troy
Thanks a lot for these comments! I'll have a look.
Best regards and happy neutrinos!
frc (forever searching for neutrinoless double beta...)

 >>troy d. straszheim a écrit :
> François Mauger wrote:
>> Hi Troy,
>>> You could try adding this to the top of your script:
>>>       import dl
>>>       import sys
>>>       flags = sys.getdlopenflags()
>>>       sys.setdlopenflags(flags | dl.RTLD_GLOBAL)
>> Great! It works (at least no problem appeared after several trial)!
>> Thank you very much. I was so desesperate!
>> It seems also that I should use this 'trick' within my former
>> work: it has probably worked for monthes only by chance!
> We (IceCube) use this combination of serialization and python bindings 
> on a large
> scale on linux/osx/fbsd with good results.  I wouldn't be too afraid.
>> Now I got a solution, may I dare ask you an explanation
>> about this issue?
>> I'm rather unskilled with this 'dl' stuff. What I don't understand
>> is why my code was working in some case and not in another one, despite
>> the fact that imported wrapper modules were the same.
>> Does it have to do with some unpredictable dynamic loading
>> of symbols depending of the Python running context? Do you think this
>> issue would appear also under Darwin (the other target OS for my libs)?
> You can look at the what the flags RTLD_GLOBAL and RTLD_LOCAL do in a
> call to dlopen() (manpage).  It is worth writing some test cases and 
> really learning what is happening.  By default a python 'import' uses
> RTLD_LOCAL (use strace and see for yourself);  the voodoo above sets the
> default to RTLD_GLOBAL, as you can probably guess.  There is also a
> paper called "how to write shared libraries" by Ulrich Drepper with lots
> of good background information in it.
> Another thing to play with: force an RTLD_GLOBAL load of the wrapped 
> shared library by calling dlopen("", RTLD_NOW | 
> RTLD_GLOBAL) inside the BOOST_PYTHON_MODULE(wrappedlib) { ... } function.
> -t
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
François Mauger
Département de Physique - Université de Caen Basse-Normandie
courriel/e-mail: mauger_at_[hidden]
tél./phone: 02 31 45 25 12 / (+33) 2 31 45 25 12
fax:        02 31 45 25 49 / (+33) 2 31 45 25 49
   Laboratoire de Physique Corpusculaire de Caen (UMR 6534)
   6, Boulevard du Marechal Juin
   14050 CAEN Cedex

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at