Обсуждение: NetBSD 1.4.2/i386 needs to link psql with -ltermcap
[ Slightly edited take #2: I wasn't subscribed (again :-() to the
-bugs list. Moderator -- you can kill any postings of mine in the
queue, if you care to. :-]
Hi,
Today I built postgresql-7.1beta6 on NetBSD-1.4.2/i386, which uses
a.out binary format. (NetBSD 1.5/i386 uses ELF.)
I found that psql needs to be linked with -ltermcap or else psql will
fail with a runtime error when used interactively:
$ psql ...
Welcome to psql, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help on internal slash commands
\g or terminate with semicolon to execute query
\q to quit
/usr/libexec/ld.so: Undefined symbol "_tgetent" called from psql:/usr/lib/libedit.so.2.2 at 0x400892ac
I added -ltermcap to the "LIBS = ..." line in Makefile.global and
rebuilt psql after which it worked without problems.
Builds on NetBSD-1.5/i386 and NetBSD-1.5/alpha included -ltermcap in
LIBS automatically.
Thanks to those who enabled libedit -- history editing is nice.
Regards,
Giles
Giles Lean writes: > Today I built postgresql-7.1beta6 on NetBSD-1.4.2/i386, which uses > a.out binary format. (NetBSD 1.5/i386 uses ELF.) > > I found that psql needs to be linked with -ltermcap or else psql will > fail with a runtime error when used interactively: > /usr/libexec/ld.so: Undefined symbol "_tgetent" called from psql:/usr/lib/libedit.so.2.2 at 0x400892ac This should be detected by configure. E.g., on my system I get | checking for readline... yes (-lreadline -ltermcap) (-lreadline and -ledit are equivalent for computational purposes). config.log shows: | configure:3143: checking for readline | configure:3165: gcc -o conftest -O2 -g conftest.c -lreadline 1>&5 [ tries without termcap] | /usr/lib/gcc-lib/i386-redhat-linux/2.96/../../../libreadline.so: undefined reference to `tgetnum' [snip] | configure:3165: gcc -o conftest -O2 -g conftest.c -lreadline -ltermcap 1>&5 [ tries with termcap, success ] Can you check around these areas why it doesn't behave as expected? -- Peter Eisentraut peter_e@gmx.net http://yi.org/peter-e/
Peter Eisentraut wrote
> This should be detected by configure. E.g., on my system I get
>
> | checking for readline... yes (-lreadline -ltermcap)
>
> (-lreadline and -ledit are equivalent for computational purposes).
On NetBSD-1.4.2 is that the link test works with -ledit, and indeed
psql built without -ltermcap will even run non-interactively (I loaded
a database with it) but it fails when running interactively.
config.log:
configure:3143: checking for readline
configure:3165: gcc -o conftest -O2 -pipe conftest.c -lreadline 1>&5
ld: -lreadline: no match
collect2: ld returned 1 exit status
configure: failed program was:
#line 3154 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char readline();
int main() {
readline()
; return 0; }
configure:3165: gcc -o conftest -O2 -pipe conftest.c -ledit 1>&5
configure:3192: checking for library containing using_history
configure:3210: gcc -o conftest -O2 -pipe conftest.c -ledit 1>&5
...
It would be nicer if the link failed. :-(
Actually running the program above:
/usr/libexec/ld.so: Undefined symbol "_tgetent" called from
conf:/usr/lib/libed\ it.so.2.2 at 0x4002d2ac
ldd doesn't show problems:
conf:
-ledit.2 => /usr/lib/libedit.so.2.2 (0x4001b000)
-lc.12 => /usr/lib/libc.so.12.40 (0x4002f000)
I'm now out of my depth with both configure and linker behaviour. :-(
Regards,
Giles
Giles Lean writes:
> char readline();
>
> int main() {
> readline()
> ; return 0; }
> configure:3165: gcc -o conftest -O2 -pipe conftest.c -ledit 1>&5
> configure:3192: checking for library containing using_history
> configure:3210: gcc -o conftest -O2 -pipe conftest.c -ledit 1>&5
> ...
>
> It would be nicer if the link failed. :-(
>
> Actually running the program above:
>
> /usr/libexec/ld.so: Undefined symbol "_tgetent" called from
> conf:/usr/lib/libed\ it.so.2.2 at 0x4002d2ac
This looks to be an oddly behaving linker. Maybe this is a better
question for a netbsd user forum.
> ldd doesn't show problems:
>
> conf:
> -ledit.2 => /usr/lib/libedit.so.2.2 (0x4001b000)
> -lc.12 => /usr/lib/libc.so.12.40 (0x4002f000)
How about ldd libedit?
--
Peter Eisentraut peter_e@gmx.net http://yi.org/peter-e/