dbTalk Databases Forums  

[BUGS] 8.0.0beta1: -lpthread missing

mailing.database.pgsql-bugs mailing.database.pgsql-bugs


Discuss [BUGS] 8.0.0beta1: -lpthread missing in the mailing.database.pgsql-bugs forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Martin Münstermann
 
Posts: n/a

Default [BUGS] 8.0.0beta1: -lpthread missing - 08-10-2004 , 01:30 PM






System Configuration
---------------------
Architecture (example: Intel Pentium) : Intel Pentium

Operating System (example: Linux 2.4.18) : Linux 2.4.21-grsec
(Debian)

PostgreSQL version (example: PostgreSQL-8.0): PostgreSQL-8.0.0-beta1

Compiler used (example: gcc 2.95.2) : 2.95.4


Please enter a FULL description of your problem:
------------------------------------------------
When configuring --enable-thread-safety the binaries cannot be linked:
gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes
-Wmissing-declarations initdb.o dirmod.o exe
c.o -L../../../src/interfaces/libpq -lpq -L../../../src/port
-Wl,-rpath,/opt/postgresql-800beta1/li
b -lpgport -lz -lreadline -lcrypt -lresolv -lnsl -ldl -lm -o initdb
.../../../src/interfaces/libpq/libpq.so: undefined reference to
`pthread_getspecific'
.../../../src/interfaces/libpq/libpq.so: undefined reference to
`pthread_once'
.../../../src/interfaces/libpq/libpq.so: undefined reference to
`pthread_key_create'
.../../../src/interfaces/libpq/libpq.so: undefined reference to
`pthread_setspecific'
collect2: ld returned 1 exit status



Please describe a way to repeat the problem. Please try to provide a
concise reproducible example, if at all possible:
----------------------------------------------------------------------
# ./configure --prefix=/opt/postgresql-800beta1 --enable-thread-safety
# make


If you know how this problem might be fixed, list the solution below:
---------------------------------------------------------------------
The binaries must be linked with pthread (-lpthread).


Regards,
Martin


---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

http://www.postgresql.org/docs/faqs/FAQ.html

Reply With Quote
  #2  
Old   
Robert Treat
 
Posts: n/a

Default Re: [BUGS] 8.0.0beta1: -lpthread missing - 08-10-2004 , 06:20 PM






On Tuesday 10 August 2004 05:14, Martin M=FCnstermann wrote:
Quote:
System Configuration
---------------------
Architecture (example: Intel Pentium) : Intel Pentium

Operating System (example: Linux 2.4.18) : Linux 2.4.21-grsec
(Debian)

PostgreSQL version (example: PostgreSQL-8.0): PostgreSQL-8.0.0-beta1

Compiler used (example: gcc 2.95.2) : 2.95.4


Please enter a FULL description of your problem:
------------------------------------------------
When configuring --enable-thread-safety the binaries cannot be linked:
gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes
-Wmissing-declarations initdb.o dirmod.o exe
c.o -L../../../src/interfaces/libpq -lpq -L../../../src/port
-Wl,-rpath,/opt/postgresql-800beta1/li
b -lpgport -lz -lreadline -lcrypt -lresolv -lnsl -ldl -lm -o initdb
../../../src/interfaces/libpq/libpq.so: undefined reference to
`pthread_getspecific'
../../../src/interfaces/libpq/libpq.so: undefined reference to
`pthread_once'
../../../src/interfaces/libpq/libpq.so: undefined reference to
`pthread_key_create'
../../../src/interfaces/libpq/libpq.so: undefined reference to
`pthread_setspecific'
collect2: ld returned 1 exit status



Please describe a way to repeat the problem. Please try to provide a
concise reproducible example, if at all possible:
----------------------------------------------------------------------
# ./configure --prefix=3D/opt/postgresql-800beta1 --enable-thread-safety
# make


If you know how this problem might be fixed, list the solution below:
---------------------------------------------------------------------
The binaries must be linked with pthread (-lpthread).

Can you take a look at the thread below and report back if that fixes your=
=20
problem? http://archives.postgresql.org/pgsql...8/msg00525.php

--=20
Robert Treat
Build A Better Lamp :: Linux Apache {middleware} PostgreSQL

---------------------------(end of broadcast)---------------------------
TIP 8: explain analyze is your friend


Reply With Quote
  #3  
Old   
Bruce Momjian
 
Posts: n/a

Default Re: [BUGS] 8.0.0beta1: -lpthread missing - 08-10-2004 , 10:32 PM




In fact, backup in the output and look at the flags used to build libpq.
Are they correct? If they are, you shouldn't need any additional flags
when building initdb because initdb doesn't call any threaded functions,
_except_ if you have that limitation that a libpq using threads requries
a thread flag for everything that calls libpq.

Please report back.

---------------------------------------------------------------------------

Robert Treat wrote:
Quote:
On Tuesday 10 August 2004 05:14, Martin M?nstermann wrote:
System Configuration
---------------------
Architecture (example: Intel Pentium) : Intel Pentium

Operating System (example: Linux 2.4.18) : Linux 2.4.21-grsec
(Debian)

PostgreSQL version (example: PostgreSQL-8.0): PostgreSQL-8.0.0-beta1

Compiler used (example: gcc 2.95.2) : 2.95.4


Please enter a FULL description of your problem:
------------------------------------------------
When configuring --enable-thread-safety the binaries cannot be linked:
gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes
-Wmissing-declarations initdb.o dirmod.o exe
c.o -L../../../src/interfaces/libpq -lpq -L../../../src/port
-Wl,-rpath,/opt/postgresql-800beta1/li
b -lpgport -lz -lreadline -lcrypt -lresolv -lnsl -ldl -lm -o initdb
../../../src/interfaces/libpq/libpq.so: undefined reference to
`pthread_getspecific'
../../../src/interfaces/libpq/libpq.so: undefined reference to
`pthread_once'
../../../src/interfaces/libpq/libpq.so: undefined reference to
`pthread_key_create'
../../../src/interfaces/libpq/libpq.so: undefined reference to
`pthread_setspecific'
collect2: ld returned 1 exit status



Please describe a way to repeat the problem. Please try to provide a
concise reproducible example, if at all possible:
----------------------------------------------------------------------
# ./configure --prefix=/opt/postgresql-800beta1 --enable-thread-safety
# make


If you know how this problem might be fixed, list the solution below:
---------------------------------------------------------------------
The binaries must be linked with pthread (-lpthread).


Can you take a look at the thread below and report back if that fixes your
problem? http://archives.postgresql.org/pgsql...8/msg00525.php

--
Robert Treat
Build A Better Lamp :: Linux Apache {middleware} PostgreSQL

---------------------------(end of broadcast)---------------------------
TIP 8: explain analyze is your friend

--
Bruce Momjian | http://candle.pha.pa.us
pgman (AT) candle (DOT) pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073

---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to majordomo (AT) postgresql (DOT) org)


Reply With Quote
  #4  
Old   
Bruce Momjian
 
Posts: n/a

Default Re: [BUGS] 8.0.0beta1: -lpthread missing - 08-10-2004 , 10:34 PM



Robert Treat wrote:
Quote:
`pthread_once'
../../../src/interfaces/libpq/libpq.so: undefined reference to
`pthread_key_create'
../../../src/interfaces/libpq/libpq.so: undefined reference to
`pthread_setspecific'
collect2: ld returned 1 exit status



Please describe a way to repeat the problem. Please try to provide a
concise reproducible example, if at all possible:
----------------------------------------------------------------------
# ./configure --prefix=/opt/postgresql-800beta1 --enable-thread-safety
# make


If you know how this problem might be fixed, list the solution below:
---------------------------------------------------------------------
The binaries must be linked with pthread (-lpthread).


Can you take a look at the thread below and report back if that fixes your
problem? http://archives.postgresql.org/pgsql...8/msg00525.php
I looked at that. The line that does the tests is in
config/acx_pthread.m4:

acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread
-pthreads -mthreads pthread --thread-safe -mt pthread-conf ig"

so you should see that list tried. Does that help?

I am majorly concerned that Slackware has the same problem as Unixware,
meaning that if you use threading in the lib, you now need the flags on
every applicaiton that uses the lib.

--
Bruce Momjian | http://candle.pha.pa.us
pgman (AT) candle (DOT) pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073

---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to majordomo (AT) postgresql (DOT) org)


Reply With Quote
  #5  
Old   
Bruce Momjian
 
Posts: n/a

Default Re: [BUGS] 8.0.0beta1: -lpthread missing - 08-11-2004 , 11:33 AM




OK, I have some more information. Basically, the config/acx_pthread.m4
manual page (http://www.gnu.org/software/ac-archi...x_pthread.html)
says:

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.

If I add -g3 in interfaces/libpq/Makefile:

override CFLAGS += $(PTHREAD_CFLAGS) -g3

I see -g3 in the libpq link line:

gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes
-Wmissing-declarations -O1 -Wall -Wmissing-prototypes
-Wmissing-declarations -Wpointer-arith -Wcast-align -D_REENTRANT
-D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -g3 -fpic -shared

^^^
-Wl,-x,-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 -L/usr/local/lib
-L/usr/contrib/lib -lintl -lssl -lcrypto -lc
-Wl,-rpath,/usr/local/pgsql/lib -o libpq.so.3.2

Do you see similar behavior in Slackware? I assumed all compilers would
use $CFLAGS in their link lines.

---------------------------------------------------------------------------

Martin Münstermann wrote:
Quote:
Hello!

Bruce Momjian wrote:
Robert Treat wrote:

`pthread_once'
../../../src/interfaces/libpq/libpq.so: undefined reference to
`pthread_key_create'
../../../src/interfaces/libpq/libpq.so: undefined reference to
`pthread_setspecific'
collect2: ld returned 1 exit status



Please describe a way to repeat the problem. Please try to provide a
concise reproducible example, if at all possible:
----------------------------------------------------------------------
# ./configure --prefix=/opt/postgresql-800beta1 --enable-thread-safety
# make


If you know how this problem might be fixed, list the solution below:
---------------------------------------------------------------------
The binaries must be linked with pthread (-lpthread).


Can you take a look at the thread below and report back if that fixes your
problem? http://archives.postgresql.org/pgsql...8/msg00525.php

Yes, adding -lpthread to PTHREAD_LIBS and rebuilding solved the problem.
Note: when doing so, libpq.so is built with -lpthread, PTHREAD_LIBS is
*not* used in the makefiles of the client binaries like initdb and psql.

I looked at that. The line that does the tests is in
config/acx_pthread.m4:

acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread
-pthreads -mthreads pthread --thread-safe -mt pthread-conf ig"

so you should see that list tried. Does that help?

I am majorly concerned that Slackware has the same problem as Unixware,
meaning that if you use threading in the lib, you now need the flags on
every applicaiton that uses the lib.

At least on debian this is not the case (see above):
-lpthread is used when building libpq.so.3.2.
So the shared library contains a dependency on libpthread.so.
Then the client apps do not need a -lpthread at build time. The dynamic
linker will resolve the dependency on libpthread.so (via libpq.so) at
runtime.

Regards,
Martin

--
Bruce Momjian | http://candle.pha.pa.us
pgman (AT) candle (DOT) pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073

---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

http://www.postgresql.org/docs/faqs/FAQ.html


Reply With Quote
  #6  
Old   
Martin Münstermann
 
Posts: n/a

Default Re: [BUGS] 8.0.0beta1: -lpthread missing - 08-13-2004 , 12:48 PM



Bruce Momjian wrote:
Quote:
OK, I have some more information. Basically, the config/acx_pthread.m4
manual page (http://www.gnu.org/software/ac-archi...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

---------------------------(end of broadcast)---------------------------
TIP 7: don't forget to increase your free space map settings


Reply With Quote
  #7  
Old   
Martin Münstermann
 
Posts: n/a

Default Re: [BUGS] 8.0.0beta1: -lpthread missing - 08-13-2004 , 01:17 PM



Hello!

Bruce Momjian wrote:
Quote:
Robert Treat wrote:

`pthread_once'
../../../src/interfaces/libpq/libpq.so: undefined reference to
`pthread_key_create'
../../../src/interfaces/libpq/libpq.so: undefined reference to
`pthread_setspecific'
collect2: ld returned 1 exit status



Please describe a way to repeat the problem. Please try to provide a
concise reproducible example, if at all possible:
----------------------------------------------------------------------
# ./configure --prefix=/opt/postgresql-800beta1 --enable-thread-safety
# make


If you know how this problem might be fixed, list the solution below:
---------------------------------------------------------------------
The binaries must be linked with pthread (-lpthread).


Can you take a look at the thread below and report back if that fixes your
problem? http://archives.postgresql.org/pgsql...8/msg00525.php
Yes, adding -lpthread to PTHREAD_LIBS and rebuilding solved the problem.
Note: when doing so, libpq.so is built with -lpthread, PTHREAD_LIBS is
*not* used in the makefiles of the client binaries like initdb and psql.

Quote:
I looked at that. The line that does the tests is in
config/acx_pthread.m4:

acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread
-pthreads -mthreads pthread --thread-safe -mt pthread-conf ig"

so you should see that list tried. Does that help?

I am majorly concerned that Slackware has the same problem as Unixware,
meaning that if you use threading in the lib, you now need the flags on
every applicaiton that uses the lib.
At least on debian this is not the case (see above):
-lpthread is used when building libpq.so.3.2.
So the shared library contains a dependency on libpthread.so.
Then the client apps do not need a -lpthread at build time. The dynamic
linker will resolve the dependency on libpthread.so (via libpq.so) at
runtime.

Regards,
Martin


---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://archives.postgresql.org


Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.3
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.