Компилировать ошибки Ruby 2.0 без rvm или rbenv, `readline.c: 1886: 26: ошибка: "Функция" необъявленная (сначала используется в этой функции)`
Я хочу установить gitlab, который не рекомендует использовать любой менеджер версий ruby.
Но
Это моя ОС Linux dqa-dev 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:08:14 UTC 2014 i686 i686 i686 GNU/Linux
linking shared-object psych.so
installing default psych libraries
make[2]: Leaving directory `/home/poc/ruby-2.0.0-p451/ext/psych'
make[2]: Entering directory `/home/poc/ruby-2.0.0-p451/ext/pty'
compiling pty.c
pty.c: In function 'chfunc':
pty.c:143:12: warning: ignoring return value of 'seteuid', declared with attribute warn_unused_result [-Wunused-result]
seteuid(getuid());
^
linking shared-object pty.so
installing default pty libraries
make[2]: Leaving directory `/home/poc/ruby-2.0.0-p451/ext/pty'
make[2]: Entering directory `/home/poc/ruby-2.0.0-p451/ext/racc/cparse'
compiling cparse.c
linking shared-object racc/cparse.so
installing default cparse libraries
make[2]: Leaving directory `/home/poc/ruby-2.0.0-p451/ext/racc/cparse'
make[2]: Entering directory `/home/poc/ruby-2.0.0-p451/ext/readline'
compiling readline.c
readline.c: In function 'Init_readline':
readline.c:1886:26: error: 'Function' undeclared (first use in this function)
rl_pre_input_hook = (Function *)readline_pre_input_hook;
^
readline.c:1886:26: note: each undeclared identifier is reported only once for each function it appears in
readline.c:1886:36: error: expected expression before ')' token
rl_pre_input_hook = (Function *)readline_pre_input_hook;
^
readline.c: At top level:
readline.c:530:1: warning: 'readline_pre_input_hook' defined but not used [-Wunused-function]
readline_pre_input_hook(void)
^
make[2]: *** [readline.o] Error 1
make[2]: Leaving directory `/home/poc/ruby-2.0.0-p451/ext/readline'
make[1]: *** [ext/readline/all] Error 2
make[1]: Leaving directory `/home/poc/ruby-2.0.0-p451'
make: *** [build-ext] Error 2
Ответы
Ответ 1
У меня также есть Ubuntu 14.04, и я должен заставить его работать. Разделяя то, что я сделал на всякий случай, если оно работает для вас.
Я исправил файл ext/readline/readline.c
, заменив строку 1886
:
rl_pre_input_hook = (Function *)readline_pre_input_hook;
С
rl_pre_input_hook = (rl_hook_func_t *)readline_pre_input_hook;
Затем я попытался сделать это снова, и он сработал.
Источник: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=741825
Ответ 2
Я также столкнулся с этой проблемой, пытаясь установить ruby-2.0.0-p247 с помощью rbenv. Сэкономьте некоторое время, используя этот патч.
Вы можете запустить его следующим образом:
curl -fsSL https://gist.github.com/ference/d3d4cbbe18309a91ad9b/raw/267ea89fa145c536967831e1af4dea030297b53e/ruby-2.0.0-p247.patch | rbenv install --patch 2.0.0-p247
Ответ 3
Это мое решение в версии сервера Ubuntu 14.04.
Мне нужно установить подчеркивание
sudo apt-get install libreadline6 libreadline6-dev
Тогда проблема была исправлена.
Ответ 4
Найден решение от https://github.com/sstephenson/ruby-build/issues/690. На самом деле отсутствует libffi-dev. Я пробовал Ubuntu 12.04, и это успешно.
sudo apt-get install libffi-dev