Thread: Darwin libpq link failing
I have a library that I wrote under OpenBSD and built with no problem for years.. but as I'm porting to darwin, I'm noticingsome .. unpleasend behavioure during final linking on a Mac OS 10.2.4 sytem . please point out any oversights.. first versions.. xpi@ryoku:mutilities>psql -V <xpi psql (PostgreSQL) 7.3.1 built locally with --no-readline as it's only configure option and gcc 3.1.. on root@ryoku:src>uname -a <root Darwin ryoku 6.3 Darwin Kernel Version 6.3: Sat Dec 14 03:11:25 PST 2002; root:xnu/xnu-344.23.obj~4/RELEASE_PPC Power Macintoshpowerpc Please note that it doesn't bomb after -lpq , as it would if it were an unreadable/invalid library name xpi@ryoku:mutilities>make test <xpi gcc -O -pipe -Wall -g -Dbugs -I/Users/xpi/tmpsrc/lib/mutilities -L/Users/xpi/tmpsrc/lib/mutilities -Dpthreads -Ddarwin-I/usr/local/pgsql/include -L/usr/local/pgsql/lib -lpq -lpq mutil.o maintest.c ld: Undefined symbols: _PQclear _PQerrorMessage _PQsetdbLogin ... _PQstatus *** Error code 1 just to make life difficult for my typo's: root@ryoku:lib>nm libpq.a | grep _PQclear <root U _PQclear 000006a0 T _PQclear U _PQclear root@ryoku:lib>pwd <root /usr/local/pgsql/lib thank you for your time, >ash
ash <xpi@aeria.net> writes: > gcc -O -pipe -Wall -g -Dbugs -I/Users/xpi/tmpsrc/lib/mutilities -L/Users/xpi/tmpsrc/lib/mutilities -Dpthreads -Ddarwin-I/usr/local/pgsql/include -L/usr/local/pgsql/lib -lpq -lpq mutil.o maintest.c > ld: Undefined symbols: > _PQclear > _PQerrorMessage > _PQsetdbLogin Surely the library reference must come after the files that reference it. regards, tom lane
Tom Lane wrote: > ash <xpi@aeria.net> writes: > > gcc -O -pipe -Wall -g -Dbugs -I/Users/xpi/tmpsrc/lib/mutilities -L/Users/xpi/tmpsrc/lib/mutilities -Dpthreads -Ddarwin-I/usr/local/pgsql/include -L/usr/local/pgsql/lib -lpq -lpq mutil.o maintest.c > > ld: Undefined symbols: > > _PQclear > > _PQerrorMessage > > _PQsetdbLogin > > Surely the library reference must come after the files that reference > it. Right. Some linkers seem to do reordering themselves, while others require the ordering to be specified in the proper dependency order; I prefer a linker that doesn't do any reordering itself --- it can lead to surprises and doesn't handle well cases where the same symbol is defined in multiple libraries. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001+ If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania19073