Dynamic linker

bruce bushby bruce.bushby at gmail.com
Wed Mar 23 22:41:44 UTC 2011


Hi Joakim

>>>Yes, but probably doesn't link with it?
>>>do a readelf -d libreadline.so.6, see ncurses it listed in NEEDED:
 >>>0x00000001 (NEEDED)                     Shared library:
[libncurses.so.5]
 >>>0x00000001 (NEEDED)                     Shared library: [libc.so.6]

Thanks for the example....dare I say you've hit the proverbial nail?

Only difference when compared to your example is....my "libreadline" doesn't
even know about "libncurses"?

libreadline:
[root at dlxarm01 buildroot]# readelf -d
./output/target/usr/lib/libreadline.so.6.1 | grep "]"
 0x00000001 (NEEDED)                     Shared library: [libc.so.0]
 0x0000000e (SONAME)                     Library soname: [libreadline.so.6]
 0x0000000f (RPATH)                      Library rpath: [/usr/lib]
[root at dlxarm01 buildroot]#

Python's lib-dynload/libreadline.so:
[root at dlxarm01 buildroot]# readelf -d
./output/target/usr/lib/python2.7/lib-dynload/readline.so | grep "]"
 0x00000001 (NEEDED)                     Shared library: [libreadline.so.6]
 0x00000001 (NEEDED)                     Shared library: [libncurses.so.5]
 0x00000001 (NEEDED)                     Shared library: [libc.so.0]
[root at dlxarm01 buildroot]#

libncurses:
[root at dlxarm01 buildroot]# readelf -d ./output/target/usr/lib/libncurses.so
| grep "]"
 0x00000001 (NEEDED)                     Shared library: [libc.so.0]
 0x0000000e (SONAME)                     Library soname: [libncurses.so.5]
[root at dlxarm01 buildroot]#


I checked my linux laptop (Fedora 13):
[bruce at laptop ~]$ readelf -d /lib64/libreadline.so.6.1 | grep "]"
 0x0000000000000001 (NEEDED)             Shared library: [libtinfo.so.5]
<----- I think this is correct
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
 0x000000000000000e (SONAME)             Library soname: [libreadline.so.6]
[bruce at laptop ~]$


So ....if I understand things correctly ......"readelf -d
./output/target/usr/lib/libncurses.so" shows that
"readline" is not linking properly when compiled....even though "ncurses"
was defined as a dependency or if I manually build/install ncurses first.

@Peter: Thanks for the linking options, would I be able to implement them
using a patch? What file would I patch....the "readline" Makefile?

Thanks again to everybody for the help!

Bruce









On Wed, Mar 23, 2011 at 8:07 PM, Joakim Tjernlund <
joakim.tjernlund at transmode.se> wrote:

> bruce bushby <bruce.bushby at gmail.com> wrote on 2011/03/23 20:19:06:
> >
> > Over the past two weeks I've tried many variations, unfortunately without
> any success.
> >
> > I've tried building on these platforms:
> > Fedora 12
> > Fedora 14
> > Ubuntu Natty 11.04
> >
> > Buildoot:
> > buildroot-dailysnapshot
> > buildroot-2011-02
> >
> > uclibc:
> > 0.9.31
> > 0.9.32-rc2
> >
> > Building "readline" without "ncurses" and with the dependency on
> "ncurses" removed:
> > [root at dlxarm01 buildroot]# grep -i tgetent
> make-readline-without-ncurses.log
> > checking for tgetent... no
> > checking for tgetent in -ltermcap... no
> > checking for tgetent in -ltinfo... no
> > checking for tgetent in -lcurses... no
> > checking for tgetent in -lncurses... no
> > [root at dlxarm01 buildroot]#
> >
> > BUT....readline still compiles.....this could be due to the fact that I
> am unable to run "autoreconf" when building "readline"?
> >
> > I then run "make ncurses" and then re-run "make readline" to see if it's
> uses "ncurses" for "tgetent":
> > [root at dlxarm01 buildroot]# grep -i tgetent
> make-readline-with-ncurses.log
> > checking for tgetent... no
> > checking for tgetent in -ltermcap... no
> > checking for tgetent in -ltinfo... no
> > checking for tgetent in -lcurses... yes
> > [root at dlxarm01 buildroot]#
> >
> > So "readline" does find "ncurses".
>
> Yes, but probably doesn't link with it?
> do a readelf -d libreadline.so.6, see ncurses it listed in NEEDED:
>  0x00000001 (NEEDED)                     Shared library: [libncurses.so.5]
>  0x00000001 (NEEDED)                     Shared library: [libc.so.6]
>
> >
> > My Fedora 12 X64 desktop uses "termcap" rather then "ncurses":
> > [bruce at core readline-6.2]$ ./configure | grep -i tgetent
> > checking for tgetent... no
> > checking for tgetent in -ltermcap... yes
> > [bruce at core readline-6.2]$
> >
> > I will try and add "readelf" to my build and forward the results of
> checking "libreadline" and "libncurses"
> >
> > I really appreciate the help!
> >
> > I've been stuck for so long now I thought of offering a $200.00 reward to
> anybody who can fix it.
> >
> > Bruce
> >
> > On Wed, Mar 23, 2011 at 6:15 PM, Joakim Tjernlund <
> joakim.tjernlund at transmode.se> wrote:
> > vapierfilter at gmail.com wrote on 2011/03/23 18:57:04:
> > >
> > > On Wed, Mar 23, 2011 at 1:19 PM, Joakim Tjernlund wrote:
> > > > From: Salvatore CRO <salvatore.cro at st.com>
> > > >> We have been looking at the same problem in the last days...
> > > >> Libreadline needs either libncurses or libtermcap to provide these
> symbols.
> > > >> Even though one of the two is supposed to be linked to libreadline
> (depending on
> > > >> Certain logic in its build configure), it seems this is not actual
> the case.
> > > >> We'll keep investigating into libreadline package configure.
> > > >
> > > > Unless someone changed this, uClibc needs to have either
> > > > libncurses or libtermcap linked to readline(needs to be in
> > > > readline's NEEDED list) or uClibc will fail. glibc doesn't require
> this, but I believe the specs says that all deps should be listed.
> > >
> > > i'm pretty sure that's the intended behavior we still have.  i wonder
> > > if we should FAQ this ...
> > > -mike
>
> > Yes, since this is not the first time this problem has happened.
> >
> >  Jocke
>
>


More information about the uClibc mailing list