我尝试使用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
我对这个错误一无所知。我试着用谷歌,但我似乎找不到类似的问题。
发布于 2018-07-10 05:12:17
出现此错误的常见原因是,您已经针对android-23或更高版本进行了编译,但却链接到了更早的版本。这个问题的另一个变体是,当您针对不同的API级别构建多个库时。
看起来你使用的是standalone toolchain?如果这是正确的,那么我怀疑您的问题要么是libcurses中预构建库的一部分(FWIR没有任何这样的库,所以不太可能),要么是他们的构建脚本中发生了一些奇怪的事情,导致了我提到的两个问题之一。大量的项目在他们的构建脚本中添加了他们自己的Android特定的hack,这总是导致这类问题的原因,所以我一点也不会感到惊讶。
应该同时查看tic.c的编译命令和任何库/可执行文件无法链接到那里的link命令。确保两者使用相同的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。也许值得一看,看看这是否有帮助。
https://stackoverflow.com/questions/51205243
复制相似问题