pthread_stubs.5 (2010 09)
p
pthread_stubs(5) pthread_stubs(5)
dynamic /usr/lib/libpthread.1
dynamic /usr/lib/libc.2
shared library binding:
deferred
global hash table disabled ...
Example 2
Specifying
-lc before -lpthread in threaded applications can cause run-time problems like the follow-
ing because the pthread calls get resolved to stubs in
libc rather than the functions in pthread library.
• Calls to pthread functions fail, due to uninitialized internal structures.
• Calls to gethostbyname(3N) fail and return null.
• Apache webmin and perl DBI applications fail with the following error message:
Can’t load libname .sl for module xxx: Invalid argument at
address
• Calls to shl_load (3X) fail with the following error:
errno 22 (invalid argument)
because the pthread_mutex_lock
stub returns zero.
$ cat a.c
#include <stdio.h>
#include <dl.h>
extern int errno;
main()
{
shl_load("lib_not_found", BIND_DEFERRED, 0);
printf("Error %d, %s\n", errno, strerror(errno));
}
$ cc a.c -lc -lpthread
$ a.out
Error 22, Invalid argument
$ LD_PRELOAD=/usr/lib/libpthread.1 ./a.out
Error 2, No such file or directory
$ cat b.c
#include <stdio.h>
#include <dlfcn.h>
void* handle;
extern int errno;
main()
{
handle = dlopen("lib_not_found", RTLD_LAZY);
printf("Error %d, %s\n", errno, strerror(errno));
if (handle == NULL)
{
printf("Error: %s\n",dlerror());
}
}
$ cc b.c -lc -lpthread
$ a.out
Error 22, Invalid argument
Error:
$ ./a.out
$ LD_PRELOAD=/usr/lib/libpthread.1
Error 0, Error 0
Error: Can’t open shared library: lib_not_found
4 Hewlett-Packard Company − 4 − HP-UX 11i Version 3: September 2010