Boost logo

Boost :

From: Stephan Diederich (stephan.diederich_at_[hidden])
Date: 2007-07-12 06:28:18


On 7/11/07, Janek Kozicki <janek_listy_at_[hidden]> wrote:
>
> Stephan Diederich said: (by the date of Wed, 11 Jul 2007 21:52:32
> +0200)
>
> > First, the executable needs to be linked with "-rdynamic". With that
> flag
>
> I confirm that. To write my own plugin loading library on linux I had
> to use -rdynamic flag almost everywhere (for plugins too!).

> Second, the call to dlopen a library should be passed RTLD_GLOBAL. With
> that
>
> However i don't need to do anything with regard to RTLD_GLOBAL

I gave it a try with another testcase. It is attached to this mail, but is a
bit clumsy.
There are 3 directories: src (with the main app), lib1 and lib2. (the tests
are handmade)

The first test is to create a boost::any in lib1 and try to extract it in
main.
 This works, as long as the executable is linked with -rdynamic. (the lib
doesn't need it). dlopen flags don't matter, too.

The second testcase is to create a boost::any in lib1, and try to extract it
in lib2.
 This works, as long as the first lib is opened with RTLD_GLOBAL flag.
 If the executable is linked _with_ -rdynamic all 3 modules now have the
same typeinfos. But this testcase even works _without_ the -rdynamic flag.
Then lib1 and lib2 share the same typeinfos, but the executable has a
different one (and cannot do anything with the boost::any from the libs)

HTH,
Stephan




Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk