[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