Ошибка компиляции NCurses 6.0 при использовании Android-NDK - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь кросс-компилировать ncurses, используя android-ndk, но ошибка компиляции показывает, что процесс идет наполовину.

Команда:

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

Понятия не имею об ошибке. Я пытался использовать Google, но я не могу найти подобные проблемы, как у меня.

1 Ответ

0 голосов
/ 10 июля 2018

Обычной причиной этой ошибки является то, что вы скомпилировали для Android-23 или выше, но ранее ссылались на что-то.Другой вариант этой проблемы - когда у вас есть несколько библиотек, построенных на разных уровнях API.

Похоже, вы используете автономный набор инструментов ?Если это правильно, то я подозреваю, что ваша проблема - это либо готовая библиотека, которая является частью libcurses (FWIR там нет ни одной из них, так что маловероятно), либо что в их сценариях сборки происходит что-то напуганное, что вызывает одно из двухвопросы, которые я упомянул.Тонны проектов добавляют свои собственные специфические хаки для Android в свои скрипты сборки, которые всегда заканчиваются причиной подобных проблем, поэтому меня это совсем не удивит.

Нужно взглянуть на обе команды компиляции дляtic.c и команда link для любой библиотеки / исполняемого файла не может связать там.Убедитесь, что оба используют одни и те же уровни API (ищите такие вещи, как $NDK/platforms/android-$API_LEVEL, -D__ANDROID_API__=$API_LEVEL и -target arm-linux-androideabi$API_LEVEL).

btw, а не ncurses 6, но у меня есть пример, показывающий, как использоватьавтономные наборы инструментов, которые должны были создавать ncurses 5.9: https://github.com/DanAlbert/lua-ndk/blob/master/build_lua_with_libreadline.sh#L75. Возможно, стоит посмотреть, поможет ли это вообще.

...