With Mandrake 6.0, I have seen an "undefined symbol: BC" error
with several applications using libreadline.so.
For instance:
$ smbstatus
smbstatus: error in loading shared libraries: /usr/lib/libreadline.so.3: undefined
symbol: BC
$
Apparently, this symbol was moved from one "so" to another one
after the calling applications were built.
Now, BC is defined in libncurses and libtermcap :
$ nm -o 2>/dev/null /usr/lib/lib*.so | grep ' BC'
/usr/lib/libcurses.so:0003e4ac B BC
/usr/lib/libncurses.so:0003e4ac B BC
/usr/lib/libreadline.so: U BC
/usr/lib/libtermcap.so:00003820 B BC
$
(note that libcurses points to libncurses)
But smbstatus does not reference any of them :
$ ldd /usr/bin/smbstatus
/lib/libNoVersion.so.1 => /lib/libNoVersion.so.1 (0x40015000)
libreadline.so.3 => /usr/lib/libreadline.so.3 (0x40022000)
libdl.so.2 => /lib/libdl.so.2 (0x40048000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x4004b000)
libpam.so.0 => /lib/libpam.so.0 (0x40078000)
libc.so.6 => /lib/libc.so.6 (0x40080000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
$
I tried to force the usage of libncurses.so using the environment
variable which is mentioned in "man ld.so", but it does not work
either (but I am not sure to use it correctly) :
LD_AOUT_PRELOAD
The name of an additional, user-specified, shared
library to be loaded after all others. This can be
used to selectively override functions in other
shared libraries.
$ LD_AOUT_PRELOAD=/usr/lib/libncurses.so
$ export LD_AOUT_PRELOAD
$ smbstatus
smbstatus: error in loading shared libraries: /usr/lib/libreadline.so.3: undefined
symbol: BC
$
I checked that smbstatus has no setuid bit which could prevent
this from working.
Any idea ?
-Thierry
__________________________________________________________________________
Thierry Lelegard, "The Jazzing Troll", Email: [EMAIL PROTECTED]
CANAL+, 25 rue Leblanc, 75906 Paris Cedex 15, France
Tel: +33 1 44 25 77 44 Mob: +33 6 03 00 65 75 Fax: +33 1 44 25 77 66
__________________________________________________________________________