1 konrad.r 1.1 OpenPegasus implements RTLD_GLOBAL when loading providers.
2
3 The significance of this is that the provider writer has to be aware off the following:
4
5 - C++ providers sharing a shared library, such as a third party resource library,
6 is accessible amongst the C++ providers that use it (and have been compiled to use the
7 shared library). Exceptions from such third-party libraries can be recognized in those
8 providers. Previously in Pegasus 2.4 the exceptions were only recognized in the first
9 provider loaded while in the other providers they would not.
10
11 Problem: Possible collision of symbolic names of third party libraries. For example, if
12 the providers were using multiple third-party libraries with the same symbolic names in
13 the same namespace, then only the symbolic name solved would be called.
14 Solution:
15 1). Use different namespaces.
16 2). Use symbol hidding for different versions
17 (http://www.gnu.org/software/binutils/manual/ld-2.9.1/html_node/ld_25.html)
18
19 More information is located at http://gcc.gnu.org/faq.html#dso
20
21 - C providers are not affected. Third party libraries linked to the provider libraries
22 konrad.r 1.1 behave unchanged - they are shared amongst providers.
23
|