> > Unfortunately, the only reproducible case we have is not exactly small. > > However, we can give anyone interested full access to the machine and > > test case where it's occurring [details appended at the bottom of this > > message]. That message is referring to a slightly different situation: I am using a statically linked libboost_python.a. When I wrote the message that David attached I only had a very complex example. Now I have a significantly simpler one, and this is what I think is happening: python -> dlopen ext1.so with statically linked libboost_python.a python -> dlopen ext2.so with statically linked libboost_python.a obj1 = ext1.a_type() obj1 has a member function which will dispatch to one of two alternative C++ function. In the course of resolving which C++ function to use an exception is raised in ext2.so that is meant to be caught in ext1.so. If both extension modules are imported with RTLD_LOCAL the exception is not caught correctly. However, when using RTLD_GLOBAL this works properly. Considering the discussion in this thread it is now pretty clear that this behavior is expected. So... I have just done the step that I should apparently have done months ago (this is for how long the problem is bugging me): Compiling our extension modules against a libboost_python.so. With that my example works even without changing setdlopenflags. I am obviously learning the hard way here. At least things are starting to make sense now. And it seems as if RTLD_LOCAL will work for a shared Boost.Python library. Thanks for sharing your valuable knowledge about dynamic linking. Ralf
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4