Thread: Darwin libpq link failing

Darwin libpq link failing

From
ash
Date:
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 


Re: Darwin libpq link failing

From
Tom Lane
Date:
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


Re: Darwin libpq link failing

From
Bruce Momjian
Date:
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