Skip site navigation (1) Skip section navigation (2)

Re: psql undefined symbol error on Ubuntu

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 (view raw or flat)
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>

In response to

Responses

pgsql-novice by date

Next:From: Harsha HegdeDate: 2009-07-09 19:49:30
Subject: Re: psql undefined symbol error on Ubuntu
Previous:From: Michael GouldDate: 2009-07-09 16:37:27
Subject: Re: Setting up security for development

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group