[GRASSLIST:1261] readline problem and fix
Jack Varga
jvarga at boulder.net
Tue Sep 16 14:52:19 EDT 2003
Sharing a quick fix to a configuration error due to a problem with
readline. Not sure if it's been documented (or how many find readline
useful), but if so, it is not yet reflected in configure. This problem
exists primarily on linux for reasons not entirely clear, (although it
appears there is a link failure between the shared readline
(libreadline.so) and ncurses libraries (libncurses.so) in multiple
distributions. I'm running Mandrake 9.1)...
Symptom:
./configure --with-readline
<chop>
checking for readline in -lreadline... no
configure: error: *** Unable to locate Readline library.
From config.log...
configure:5276: checking for readline in -lreadline
configure:5293: gcc -o conftest -g -O2 conftest.c -lreadline 1>&5
/usr/lib/gcc-lib/i586-mandrake-linux-gnu/3.2.2/../../../libreadline.so:
undefined reference to `tgetnum'
/usr/lib/gcc-lib/i586-mandrake-linux-gnu/3.2.2/../../../libreadline.so:
undefined reference to `tgoto'
/usr/lib/gcc-lib/i586-mandrake-linux-gnu/3.2.2/../../../libreadline.so:
undefined reference to `tgetflag'
/usr/lib/gcc-lib/i586-mandrake-linux-gnu/3.2.2/../../../libreadline.so:
undefined reference to `BC'
/usr/lib/gcc-lib/i586-mandrake-linux-gnu/3.2.2/../../../libreadline.so:
undefined reference to `tputs'
/usr/lib/gcc-lib/i586-mandrake-linux-gnu/3.2.2/../../../libreadline.so:
undefined reference to `PC'
/usr/lib/gcc-lib/i586-mandrake-linux-gnu/3.2.2/../../../libreadline.so:
undefined reference to `tgetent'
/usr/lib/gcc-lib/i586-mandrake-linux-gnu/3.2.2/../../../libreadline.so:
undefined reference to `UP'
/usr/lib/gcc-lib/i586-mandrake-linux-gnu/3.2.2/../../../libreadline.so:
undefined reference to `tgetstr'
collect2: ld returned 1 exit status
configure: failed program was:
#line 5282 "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; }
Using linker to test readline...
$ ld /usr/lib/libreadline.so
ld: warning: cannot find entry symbol _start; not setting start address
/usr/lib/libreadline.so: undefined reference to `tgetnum'
/usr/lib/libreadline.so: undefined reference to `tgoto'
/usr/lib/libreadline.so: undefined reference to `tgetflag'
/usr/lib/libreadline.so: undefined reference to `BC'
/usr/lib/libreadline.so: undefined reference to `tputs'
/usr/lib/libreadline.so: undefined reference to `PC'
/usr/lib/libreadline.so: undefined reference to `tgetent'
/usr/lib/libreadline.so: undefined reference to `UP'
/usr/lib/libreadline.so: undefined reference to `tgetstr'
...all of which are references supplied by ncurses.
The quick fix for me was to add '-lncurses' whenever there was a link to
readline and re-run configure.
$ sed 's/\-lreadline/\-lreadline \-lncurses/g' configure > newconfigure
$ mv configure configure.bak ; mv newconfigure configure
$ ./configure --with-readline
Jack Varga
Boulder, CO
More information about the grass-user
mailing list