From: | Michael Wood <esiotrot(at)gmail(dot)com> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | pgsql-novice(at)postgresql(dot)org |
Subject: | Re: psql undefined symbol error on Ubuntu |
Date: | 2009-07-09 17:09:54 |
Message-ID: | 5a8aa6680907091009h2d1bceb2s77ca50a70f5eefa5@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-novice |
2009/7/9 Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>:
> Michael Wood <esiotrot(at)gmail(dot)com> writes:
>> Google returns many results for the error
>> "/usr/local/lib/libreadline.so.5: undefined symbol: PC". It is not
>> clear to me why so many people encounter this error, though.
>
> Historically the problem with readline has been that it can function
> with either of two underlying libraries (termcap or ncurses, if memory
> serves) and somebody thought it would be a brilliant idea to postpone
> the decision to runtime. Which meant that instead of having a package
> manager dependency on one or the other, libreadline packages were
> shipped with no explicit dependency on *either*. Everything was fine
> if you actually had one of the two installed; if not, not so much.
OK, thanks for the explanation, but it still doesn't really explain
why so many people seem to have a broken libreadline in
/usr/*local*/lib :)
> Of course this approach is pretty idiotic in the context of modern
> package-manager-based distributions. Red Hat started forcing a choice
> some years ago. I'm not sure what Ubuntu does. I suspect what the OP
> has got is one of these ill-considered packages with no hard dependency;
> but as you say, if it were an official Ubuntu package it wouldn't be
> installing into /usr/local.
Ubuntu appears to depend on libncurses:
$ apt-cache show libreadline5 | grep ^Depends
Depends: readline-common, libc6 (>= 2.6-1), libncurses5 (>= 5.6)
although dpkg supports dependencies which say that one package depends
on one of X or Y.
e.g. the dependencies for the gnome-desktop-environment package contains this:
totem-gstreamer (>= 2.22.2) | totem-xine (>= 2.22.2)
There's also another way to do this sort of thing. Packages can say
what they provide, and that can be basically the name of the package,
or a sort of virtual package. e.g. all MTAs on Debian and Ubuntu
provide "mail-transport-agent":
$ apt-cache show exim4-daemon-light | grep ^Provides
Provides: exim4-localscanapi-1.0, exim4-localscanapi-1.1, mail-transport-agent
so if another package depends on an MTA, but doesn't care which one,
it can just depend on mail-transport-agent.
I seem to remember RPM also supports this, so I don't see why anyone
would have decided not to depend on either one, unless it was possible
to use some of the functionality of libreadline without needing
ncurses or termcap.
> I don't have anything to add to your advice about how to fix it, just
> wanted to shed a bit of light on why readline has got a history of this
> kind of issue.
Thanks :)
--
Michael Wood <esiotrot(at)gmail(dot)com>
From | Date | Subject | |
---|---|---|---|
Next Message | Harsha Hegde | 2009-07-09 19:49:30 | Re: psql undefined symbol error on Ubuntu |
Previous Message | Michael Gould | 2009-07-09 16:37:27 | Re: Setting up security for development |