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("libwrappedlib.so", RTLD_NOW | RTLD_GLOBAL) inside the BOOST_PYTHON_MODULE(wrappedlib) { ... } function.
-t _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
-- François Mauger Département de Physique - Université de Caen Basse-Normandie courriel/e-mail: mauger@lpccaen.in2p3.fr 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 Adresse/address: Laboratoire de Physique Corpusculaire de Caen (UMR 6534) ENSICAEN 6, Boulevard du Marechal Juin 14050 CAEN Cedex FRANCE