Re: 8.0.0beta1: -lpthread missing - Mailing list pgsql-bugs
From | Martin Münstermann |
---|---|
Subject | Re: 8.0.0beta1: -lpthread missing |
Date | |
Msg-id | 411B1147.9000303@betrusted.com Whole thread Raw |
In response to | Re: 8.0.0beta1: -lpthread missing (Bruce Momjian <pgman@candle.pha.pa.us>) |
List | pgsql-bugs |
Bruce Momjian wrote: > OK, I have some more information. Basically, the config/acx_pthread.m4 > manual page (http://www.gnu.org/software/ac-archive/htmldoc/acx_pthread.h= > tml) > says: > =09 > NOTE: You are assumed to not only compile your program with these flags, > but also link it with them as well. e.g. you should link with > $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS > > meaning if -lpthread is defined in PTHREAD_CFLAGS, it also has to be > included in the link. Now, from your reports you said -lpthread was in > PTHREAD_CFLAGS, so why isn't it also included in the libpq link line. I > need to see your link line output for libpq. OK, here are parts of the output from configure --enable-thread-safety on Debian: [...] checking for the pthreads library -lpthreads... no checking whether pthreads work without any flags... no checking whether pthreads work with -Kthread... no checking whether pthreads work with -kthread... no checking for the pthreads library -llthread... no checking whether pthreads work with -pthread... yes checking for joinable pthread attribute... PTHREAD_CREATE_JOINABLE checking if more special flags are required for pthreads... no checking for cc_r... gcc checking pthread.h usability... yes checking pthread.h presence... yes checking for pthread.h... yes [...] --> configure thays, thate the CFLAG -pthread is sufficient. Makefile.global: PTHREAD_CFLAGS = -pthread -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS PTHREAD_LIBS = Let's look what make is doing: [...] gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes -Wmissing-declarations -I../../src/port -I../../src/include -D_GNU_SOURCE -pthread -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -c thread.c ar crs libpgport.a dirmod.o exec.o noblock.o path.o pipe.o pgsleep.o pgstrcasecmp.o sprompt.o thread.o [...] make[2]: Entering directory `/home/user/checkout/postgresql-8.0.0beta1/src/interfaces' make[3]: Entering directory `/home/user/checkout/postgresql-8.0.0beta1/src/interfaces/libpq' gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -fpic -I. -I../../../src/include -D_GNU_SOURCE -I../../../src/port -DFRONTEND -c -o fe-auth.o fe-auth.c gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -fpic -I. -I../../../src/include -D_GNU_SOURCE -I../../../src/port -DFRONTEND -c -o fe-connect.o fe-connect.c gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -fpic -I. -I../../../src/include -D_GNU_SOURCE -I../../../src/port -DFRONTEND -c -o fe-exec.o fe-exec.c gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -fpic -I. -I../../../src/include -D_GNU_SOURCE -I../../../src/port -DFRONTEND -c -o fe-misc.o fe-misc.c gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -fpic -I. -I../../../src/include -D_GNU_SOURCE -I../../../src/port -DFRONTEND -c -o fe-print.o fe-print.c gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -fpic -I. -I../../../src/include -D_GNU_SOURCE -I../../../src/port -DFRONTEND -c -o fe-lobj.o fe-lobj.c gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -fpic -I. -I../../../src/include -D_GNU_SOURCE -I../../../src/port -DFRONTEND -c -o fe-protocol2.o fe-protocol2.c gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -fpic -I. -I../../../src/include -D_GNU_SOURCE -I../../../src/port -DFRONTEND -c -o fe-protocol3.o fe-protocol3.c gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -fpic -I. -I../../../src/include -D_GNU_SOURCE -I../../../src/port -DFRONTEND -c -o pqexpbuffer.o pqexpbuffer.c gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -fpic -I. -I../../../src/include -D_GNU_SOURCE -I../../../src/port -DFRONTEND -c -o pqsignal.o pqsignal.c gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -fpic -I. -I../../../src/include -D_GNU_SOURCE -I../../../src/port -DFRONTEND -c -o fe-secure.o fe-secure.c rm -f dllist.c && ln -s ../../../src/backend/lib/dllist.c . gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -fpic -I. -I../../../src/include -D_GNU_SOURCE -I../../../src/port -DFRONTEND -c -o dllist.o dllist.c rm -f md5.c && ln -s ../../../src/backend/libpq/md5.c . gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -fpic -I. -I../../../src/include -D_GNU_SOURCE -I../../../src/port -DFRONTEND -c -o md5.o md5.c rm -f ip.c && ln -s ../../../src/backend/libpq/ip.c . gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -fpic -I. -I../../../src/include -D_GNU_SOURCE -I../../../src/port -DFRONTEND -c -o ip.o ip.c rm -f wchar.c && ln -s ../../../src/backend/utils/mb/wchar.c . gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -fpic -I. -I../../../src/include -D_GNU_SOURCE -I../../../src/port -DFRONTEND -c -o wchar.o wchar.c rm -f encnames.c && ln -s ../../../src/backend/utils/mb/encnames.c . gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -fpic -I. -I../../../src/include -D_GNU_SOURCE -I../../../src/port -DFRONTEND -c -o encnames.o encnames.c rm -f noblock.c && ln -s ../../../src/port/noblock.c . gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -fpic -I. -I../../../src/include -D_GNU_SOURCE -I../../../src/port -DFRONTEND -c -o noblock.o noblock.c rm -f pgstrcasecmp.c && ln -s ../../../src/port/pgstrcasecmp.c . gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -fpic -I. -I../../../src/include -D_GNU_SOURCE -I../../../src/port -DFRONTEND -c -o pgstrcasecmp.o pgstrcasecmp.c rm -f thread.c && ln -s ../../../src/port/thread.c . gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -fpic -I. -I../../../src/include -D_GNU_SOURCE -I../../../src/port -DFRONTEND -c -o thread.o thread.c ar crs libpq.a `lorder fe-auth.o fe-connect.o fe-exec.o fe-misc.o fe-print.o fe-lobj.o fe-protocol2.o fe-protocol3.o pqexpbuffer.o pqsignal.o fe-secure.o dllist.o md5.o ip.o wchar.o encnames.o noblock.o pgstrcasecmp.o thread.o | tsort` ranlib libpq.a gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -fpic -shared -Wl,-soname,libpq.so.3 fe-auth.o fe-connect.o fe-exec.o fe-misc.o fe-print.o fe-lobj.o fe-protocol2.o fe-protocol3.o pqexpbuffer.o pqsignal.o fe-secure.o dllist.o md5.o ip.o wchar.o encnames.o noblock.o pgstrcasecmp.o thread.o -L../../../src/port -lcrypt -lresolv -lnsl -Wl,-rpath,/opt/postgresql-800beta1/lib -o libpq.so.3.2 rm -f libpq.so.3 ln -s libpq.so.3.2 libpq.so.3 rm -f libpq.so ln -s libpq.so.3.2 libpq.so make[3]: Leaving directory `/home/user/checkout/postgresql-8.0.0beta1/src/interfaces/libpq' So the shared library is built with "-pthread" [...] gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes -Wmissing-declarations initdb.o dirmod.o exec.o -L../../../src/interfaces/libpq -lpq -L../../../src/port -Wl,-rpath,/opt/postgresql-800beta1/lib -lpgport -lz -lreadline -lcrypt -lresolv -lnsl -ldl -lm -o initdb [--> results in linker error as described in the first posting] The problem can be resolved, if I modify my Makefile.global to PTHREAD_LIBS = -lpthread Then libpq.so is built with -lpthread (note the "l"): gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes -Wmissing-declarations -pthread -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -fpic -shared -Wl,-soname,libpq.so.3 fe-auth.o fe-connect.o fe-exec.o fe-misc.o fe-print.o fe-lobj.o fe-protocol2.o fe-protocol3.o pqexpbuffer.o pqsignal.o fe-secure.o dllist.o md5.o ip.o wchar.o encnames.o noblock.o pgstrcasecmp.o thread.o -L../../../src/port -lcrypt -lresolv -lnsl -lpthread -Wl,-rpath,/opt/postgresql-800beta1/lib -o libpq.so.3.2 The link line of initdb is unchanged, with the difference that there is no error: gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes -Wmissing-declarations initdb.o dirmod.o exec.o -L../../../src/interfaces/libpq -lpq -L../../../src/port -Wl,-rpath,/opt/postgresql-800beta1/lib -lpgport -lz -lreadline -lcrypt -lresolv -lnsl -ldl -lm -o initdb So for me it looks like in my case it's not sufficient to have the compiler flag "-pthread", but also (or instead?) the linker flag "-lpthread". Maybe the case of a shared library using pthreads is not handled correctly in the m4 macro? Regards, Martin
pgsql-bugs by date: