On Tuesday 26 of June 2007, Karel Zak wrote:
> On Tue, Jun 19, 2007 at 08:58:04PM +0200, Arkadiusz Miskiewicz wrote:
> > When system ncurses is built with --with-termlib=tinfo option
> > then there are two libraries - libtinfo (which contains terminal
> > related functions) and libncurses (rest).
> >
> > Correctly link against libtinfo in such case.
>
> Why do you need extra -ltinfo? I see:

Because I use --as-needed linker option.

>
> # ldd /lib/libncurses.so.5
>       linux-gate.so.1 =>  (0xffffe000)
>       libc.so.6 => /lib/libc.so.6 (0xf7e5c000)
>       libdl.so.2 => /lib/libdl.so.2 (0xf7e57000)
>       libtinfo.so.5 => /lib/libtinfo.so.5 (0xf7e3f000)

libncurses doesn't provide tgetent function for example:

[EMAIL PROTECTED] ~]$ objdump -T /usr/lib/libncurses.so.5|grep tgetent
[EMAIL PROTECTED] ~]$ objdump -T /usr/lib/libtinfo.so|grep tgetent
0000deb3 g    DF .text  000005d9  Base        tgetent

Now if you use --as-needed then linker will throw away -lncurses since it 
doesn't provide needed tget* function and is simply not required. That's why 
you will get undefined reference.

Visual example :-)

[EMAIL PROTECTED] ~]$ cat a.c
#include <curses.h>
#include <term.h>

int main() {
        tgetent("", "");
}

[EMAIL PROTECTED] ~]$ gcc a.c -I/usr/include/ncurses -lncurses
[EMAIL PROTECTED] ~]$ gcc a.c -I/usr/include/ncurses -ltinfo
[EMAIL PROTECTED] ~]$ gcc a.c -I/usr/include/ncurses -Wl,--as-needed -lncurses
/home/users/arekm/tmp/cc6Uzb3p.o: In function `main':
a.c:(.text+0xf): undefined reference to `tgetent'
collect2: ld returned 1 exit status
[EMAIL PROTECTED] ~]$ gcc a.c -I/usr/include/ncurses -Wl,--as-needed -ltinfo
[EMAIL PROTECTED] ~]$    

> For example Fedora 7 uses tinfo, and the cal command is compiled
> without an extra -ltinfo:
>
> # ldd /usr/bin/cal
>        libncurses.so.5 => /lib64/libncurses.so.5 (0x0000003b66400000)
>        libc.so.6 => /lib64/libc.so.6 (0x0000003b51a00000)
>        libdl.so.2 => /lib64/libdl.so.2 (0x0000003b52200000)
>        libtinfo.so.5 => /lib64/libtinfo.so.5 (0x0000003b65800000)

So why do you need libncurses here?

[EMAIL PROTECTED] ~]$ ldd /usr/bin/cal
        libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00002ae5205a3000)
        libc.so.6 => /lib64/libc.so.6 (0x00002ae5207e0000)
        /lib64/ld-linux-x86-64.so.2 (0x00002ae520387000)

>   Karel

-- 
Arkadiusz Miƛkiewicz        PLD/Linux Team
arekm / maven.pl            http://ftp.pld-linux.org/
-
To unsubscribe from this list: send the line "unsubscribe util-linux-ng" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to