Non-threaded app dlopen-ing a thread-using library

Mikhail Teterin Mikhail.Teterin at murex.com
Thu Oct 6 10:16:05 PDT 2005


четвер 06 жовтень 2005 04:55, Jason Evans Ви написали:
> On Oct 4, 2005, at 11:02 PM, Mikhail Teterin wrote:
> > Do I need to make the executable itself multi-threaded -- just in case
> > it needs to dlopen() a thread-using library, or is there a better way?
>
> As long as the dlopen()ed library is correctly linked, your app
> doesn't need to explicitly link against the library's dependencies.
> Dependencies should get pulled in after dlopen() as necessary, on the
> fly, as a result of the dlopen()ed library's dependencies.

What is the correct way to link a shared object, that uses threads? Using 
`-pthread' does not seem to change the output of ldd and a non-threaded 
executable is unable to dlopen() such an object. And for good reason -- the 
thread-implementation is decided at startup time, not at link-time, is not 
it?

> There's nothing magical about a threaded app, as compared to a non-
> threaded app.  The first time a pthreads API is called, libpthread
> initializes itself.  It's fine if this happens as the result of
> executing dlopen()ed code; the only issue is making sure that the
> library dependencies are set up correctly.

So, what happens, when a main executable calls some libc function directly, 
oblivious to the pthread-wrapper around it, that the dlopen-ed library's code 
is using?

Thanks,

	-mi


More information about the freebsd-threads mailing list