Question

I am trying to cross-compile C program on Ubuntu 13.04 (i386 platform).

I setup my cross compiler toolchain using the commands below -

sudo add-apt-repository ppa:ubuntu-toolchain-r/test

sudo apt-get update

sudo apt-get install gcc-4.8-arm-linux-gnueabihf g++-4.8-arm-linux-gnueabihf pkg-config-arm-linux-gnueabihf

I wrote a small program using posix thread and it compiles and produces ARM executable using the following command -

arm-linux-gnueabihf-gcc-4.8 thread.c -o thread -lpthread

./file thread command produces 

thread: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x960a38d130a451ebb85903b5374894ff364e0633, not stripped

I noticed that pthread library was installed as part of toolchain installation.

/usr/arm-linux-gnueabihf/lib/libpthread.so.0

So far everything worked fine.

Now I tried to write a small program as below using ncurses library.

#include<ncurses.h>

int main()
{
        initscr();
        printw("Hello world\n");
        refresh();
        getch();
        endwin();

        return 0;
}

When I used the below command to compile the program, it could not find libncurses.so for ARM.

/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lncurses
collect2: error: ld returned 1 exit status

I had libncurses installed for i386 and I verified that my program compiles and runs for i386 without any problem.

Considering the library is missing for ARM, I downloaded the library from - https://packages.debian.org/en/wheezy/libncurses5 [for ARM]. I extracted the debian package and copied the .so files in the same directory where libpthread.so was located.

$/usr/arm-linux-gnueabihf/lib: ls -l libncurses.so 

produces

lrwxrwxrwx 1 root root 17 Mar  3 23:07 libncurses.so -> libncurses.so.5.9

now I issued the compilation command again and it produced the below output -

 $./arm-linux-gnueabihf-gcc-4.8 curse.c -o curse -lncurses
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/bin/ld: warning: libdl.so.2, needed by /usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so, not found (try using -rpath or -rpath-link)
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/bin/ld: warning: libtinfo.so.5, needed by /usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so, not found (try using -rpath or -rpath-link)
/tmp/ccLCmSAV.o: In function `main':
curse.c:(.text+0x14): undefined reference to `stdscr'
curse.c:(.text+0x18): undefined reference to `stdscr'
curse.c:(.text+0x24): undefined reference to `stdscr'
curse.c:(.text+0x28): undefined reference to `stdscr'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `curscr'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_setupterm'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_set_no_padding'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_getenv_num'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `tputs'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `SP'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_locale_breaks_acs'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `baudrate'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `acs_map'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `putp'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_putp'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_get_locale'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_safe_strcpy'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `cbreak'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_screen_chain'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_doalloc'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_access'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_set_buffer'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `raw'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_keypad'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `unctrl'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_get_screensize'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `tparm'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `noraw'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `tigetflag'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `wtimeout'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_str_init'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `typeahead'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_safe_strcat'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `dlsym@GLIBC_2.4'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_str_copy'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `set_curterm'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_init_acs'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_set_tty_mode'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `COLS'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_outch'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `newscr'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `reset_prog_mode'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `killchar'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `del_curterm'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `def_prog_mode'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_flush'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `def_shell_mode'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `has_ic'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_unicode_locale'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_add_to_try'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `LINES'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `TABSIZE'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_handle_sigwinch'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `nocbreak'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_timed_wait'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_name_match'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_prescreen'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `cur_term'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `flushinp'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `keyok'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `erasechar'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `dlopen@GLIBC_2.4'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `curs_set'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_update_screensize'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `dlclose@GLIBC_2.4'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `reset_shell_mode'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_get_tty_mode'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_globals'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_screen_of'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `tigetstr'
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/lib/../lib/libncurses.so: undefined reference to `_nc_str_null'
collect2: error: ld returned 1 exit status

I could not find libdl.so, but my system has libtinfo.so.5 installed in the same location where libncurses.so is installed.

/usr/arm-linux-gnueabihf/lib$ ls -l libtinfo.so*
lrwxrwxrwx 1 root root     15 Mar  4 00:36 libtinfo.so -> libtinfo.so.5.9
lrwxrwxrwx 1 root root     15 Mar  4 00:37 libtinfo.so.5 -> libtinfo.so.5.9
-rw-r--r-- 1 root root 100976 Mar  4 00:36 libtinfo.so.5.9

So why can't it find libtinfo.so.5? And why is it failing to find the symbols from libncurses.so?

Please help.

Thanks, - Salman ~

No correct solution

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top