linuxunixhp-ux

Cannot dlopen load module '/usr/lib/pa20_64/libpthread.1' because it contains thread specific data


I get this error while loading a lib with dlopen():

Cannot dlopen load module '/usr/lib/pa20_64/libpthread.1' because it contains thread specific data.

I looked this up on google and the following export fixed it.

export LD_PRELOAD=/usr/lib/hpux64/libpthread.so.1

Can anybody tell me what exactly LD_PRELOAD does and why I have to preload this lib? Why does the linker not load it?

Compiling with -lpthread does not help either.

ENV: HP-UX hhtenb1 B.11.31 U ia64 3881169896 unlimited-user license


Solution

  • I can't tell you all the details on HPUX, but try linking your program with -lpthread - that may solve your problem.

    As is, the library you're dlopen()ing seems to be digging around at run-time to find a version of libpthread. LD_PRELOAD just loads the specified library as if you'd dlopened them, but it does it before the program has a chance to start running.

    Not sure of details, but a vague guess: some library you're using has called the pthread static data functions before your dlopen triggers a load of libpthread (but why would it try to load pthread then if the first library had it as a dependency? - not sure / maybe that indicates the former library statically linked some pthread content?).