Thread: 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/