【问题标题】:NCurses 6.0 Compilation Error Using Android-NDK使用 Android-NDK 的 NCurses 6.0 编译错误
【发布时间】:2018-07-06 07:34:40
【问题描述】:

我正在尝试使用 android-ndk 交叉编译 ncurses,但编译错误显示过程进行到一半。

命令:

CC=~/my-toolchain/bin/arm-linux-androideabi-gcc ./configure --host=arm-linux-androideabi --prefix=/Android 

输出:

** Configuration summary for NCURSES 6.0 20150808:

   extended funcs: yes
   xterm terminfo: xterm-new

    bin directory: /Android/bin
    lib directory: /Android/lib
include directory: /Android/include/ncurses
    man directory: /Android/share/man
terminfo directory: /Android/share/terminfo

** Include-directory is not in a standard location  

命令

make  

输出

../objects/tic.o:tic.c:function usage: error: undefined reference to 'stderr'
../objects/tic.o:tic.c:function put_translate: error: undefined reference to 'stdout'
../objects/tic.o:tic.c:function copy_input: error: undefined reference to 'stderr'
../objects/tic.o:tic.c:function open_input: error: undefined reference to 'stdin'
../objects/tic.o:tic.c:function open_input: error: undefined reference to 'stderr'
../objects/tic.o:tic.c:function show_databases: error: undefined reference to 'stdout'
../objects/tic.o:tic.c:function show_databases: error: undefined reference to 'stderr'
../objects/dump_entry.o:dump_entry.c:function show_entry: error: undefined reference to 'stdout'
../objects/dump_entry.o:dump_entry.c:function compare_entry: error: undefined reference to 'stdout'
../lib/libncurses.a(lib_twait.o):lib_twait.c:function _nc_timed_wait: error: undefined reference to '__FD_SET_chk'
../lib/libncurses.a(lib_twait.o):lib_twait.c:function _nc_timed_wait: error: undefined reference to '__FD_SET_chk'
../lib/libncurses.a(lib_twait.o):lib_twait.c:function _nc_timed_wait: error: undefined reference to '__FD_ISSET_chk'
../lib/libncurses.a(lib_twait.o):lib_twait.c:function _nc_timed_wait: error: undefined reference to '__FD_ISSET_chk'
collect2: error: ld returned 1 exit status
Makefile:242: recipe for target 'tic' failed
make[1]: *** [tic] Error 1
make[1]: Leaving directory '/home/jrm/softether/src/curses/ncurses-6.0/progs'
Makefile:113: recipe for target 'all' failed
make: *** [all] Error 2

我对错误一无所知。我尝试使用谷歌,但我似乎找不到像我这样的类似问题。

【问题讨论】:

标签: android android-ndk cross-compiling ncurses


【解决方案1】:

此错误的通常原因是您已针对 android-23 或更高版本进行了编译,但链接到了更早的内容。该问题的另一个变体是当您针对不同的 API 级别构建多个库时。

看起来您使用的是standalone toolchain?如果这是正确的,那么我怀疑您的问题要么是作为 libcurses 一部分的预构建库(FWIR 没有这些库,所以不太可能),要么是他们的构建脚本中发生了一些时髦的事情,导致两者之一我提到的问题。大量项目将他们自己的 Android 特定黑客添加到他们的构建脚本中,这些黑客总是最终导致这些问题,所以这根本不会让我感到惊讶。

应该同时查看 tic.c 的编译命令和任何库/可执行文件无法链接到那里的链接命令。确保两者都使用相同的 API 级别(查找 $NDK/platforms/android-$API_LEVEL-D__ANDROID_API__=$API_LEVEL-target arm-linux-androideabi$API_LEVEL 等内容)。

顺便说一句,不是 ncurses 6,但我确实有一个示例展示了如何使用必须构建 ncurses 5.9 的独立工具链:https://github.com/DanAlbert/lua-ndk/blob/master/build_lua_with_libreadline.sh#L75。可能值得一看,看看是否有帮助。

【讨论】:

  • 关于 clang 的评论已经过时了,因为 5.9 是一个旧版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-28
  • 1970-01-01
  • 2012-05-02
  • 1970-01-01
  • 2012-01-22
相关资源
最近更新 更多