Linux 交叉编译ARM二进制文件无法从外部库[libncurses]中找到符号

Linux 交叉编译ARM二进制文件无法从外部库[libncurses]中找到符号,linux,gcc,arm,Linux,Gcc,Arm,我试图在Ubuntu13.04i386平台上交叉编译C程序 我使用以下命令设置交叉编译器工具链- 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 我使用posix线程编写了一个小程序

我试图在Ubuntu13.04i386平台上交叉编译C程序

我使用以下命令设置交叉编译器工具链-

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
我使用posix线程编写了一个小程序,它使用以下命令编译并生成ARM可执行文件-

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
我注意到pthread库是作为toolchain安装的一部分安装的

/usr/arm-linux-gnueabihf/lib/libpthread.so.0
到目前为止,一切顺利

现在我尝试使用ncurses库编写一个小程序,如下所示

#include<ncurses.h>

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

        return 0;
}
我为i386安装了libncurses,并验证了我的程序为i386编译和运行没有任何问题

考虑到ARM缺少该库,我从-[用于ARM]下载了该库。我提取了debian包并将.so文件复制到libpthread.so所在的同一目录中

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

lrwxrwxrwx 1 root root 17 Mar  3 23:07 libncurses.so -> libncurses.so.5.9
现在我再次发出编译命令,它产生了以下输出-

 $./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
我找不到libdl.so,但我的系统在libncurses.so的安装位置安装了libtinfo.so.5

/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
那么为什么它找不到libtinfo.So.5呢?为什么它不能从libncurses中找到符号呢

请帮忙

谢谢, -萨尔曼
~

您用来安装交叉编译工具链的存储库是否有libncurses?如果有,请使用;如果没有,您可能需要构建一个。存储库不包含libncrus。这就是为什么我从-for armhf下载了NCRUS库并从那里安装。然后你需要从同一个站点下载并安装libncurse5的所有依赖包,但我不确定它是否能工作。构建自己的ARM版本的libncurse5是另一种选择,幸运的是,您只需要构建libncurse5和libtinfo5。现在我的程序编译成功了,但我面临一个新问题。请在答案1中找到以下详细信息。
/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