loading multi threaded library into executable enabled for single thread

Barry Andrews titanandrews at gmail.com
Fri Sep 12 00:13:26 UTC 2008


FreeBSD version 5.5
output of ldd for my lib is:
libbase.so:
        libutils.so => ./libutils.so (0x287e0000)
        libACE.so.5.5.6 => ./libACE.so.5.5.6 (0x2882d000)
        libxerces-c.so.27 => ./libxerces-c.so.27 (0x28976000)
        libsqlite3.so.8 => ./libsqlite3.so.8 (0x28d23000)
        libboost_regex-gcc40-mt-d-1_34.so.1.34.0 =>
./libboost_regex-gcc40-mt-d-1_34.so.1.34.0 (0x28d76000)
        libstdc++.so.6 => ./libstdc++.so.6 (0x28e82000)
        libm.so.3 => /lib/libm.so.3 (0x28f53000)
        libgcc_s.so.1 => ./libgcc_s.so.1 (0x28f6e000)
        libpthread.so.1 => /usr/lib/libpthread.so.1 (0x28f78000)
        libc.so.5 => /lib/libc.so.5 (0x28079000)

output of ldd for tclsh is:
 libtcl84.so.1 => /usr/local/lib/libtcl84.so.1 (0x28076000)
 libm.so.3 => /lib/libm.so.3 (0x28114000)
 libc.so.5 => /lib/libc.so.5 (0x2812f000)


On Thu, Sep 11, 2008 at 3:56 PM, Brooks Davis <brooks at freebsd.org> wrote:

> On Thu, Sep 11, 2008 at 03:06:35PM -0400, Barry Andrews wrote:
> > Hi All,
> >
> > I have a multi-threaded library that is linked against libpthread. When I
> > load this lib into a tclsh process on FreeBSD, I get this error, "Recurse
> on
> > private mutex". and crash. I understand that I can have this issue when
> the
> > executable is not linked against libpthread but one of the loaded libs
> is.
> > Basically, it thinks it's in single threaded mode.
> >
> > I can get around this issue, by doing export LD_PRELOAD=libpthread.so.1,
> > however this is a hack at best. Is there any other way to get around this
> > issue other than linking tclsh with libpthread ( because that's not an
> > option)
> >
> > I thought of re-building libpthread with the offending code commented
> out,
> > and that did work, however I ran into other issues, so I think it's not a
> > very "safe" option.
> >
> > My feeling is that this is a FreeBSD issue because it's not happening on
> > other platforms, Linux, Solaris.
> >
> > Any suggestions are welcome. Many thanks!
>
> It would be helpful if you could provide:
>  - your FreeBSD version
>  - the output of "ldd libyourlib.so"
>  - the output of "ldd yourprogram"
>
> I wouldn't be supprised to find that the program and library are linked
> against
> different threading libraries.  If so, one of them will need to be relinked
> or
> you will need to use libmap.conf to cause it to use the other one.
>
> -- Brooks
>


More information about the freebsd-hackers mailing list