LINUX.ORG.RU

Нужна помощь в установке

 ,


0

1

Нужно написать маленькую программу на языке SR, возникли трудности с установкой компилятора (OC Ubutntu 32 бит на виртуальной машине) ссылка: ftp://ftp.cs.arizona.edu/sr взял файл sr.tar.Z Сделал всё как в документации: https://www2.cs.arizona.edu/sr/install.pdf Сначала распаковал:

tar fx sr.tar.Z

отредактировал файл «Configuration» (в комментариях заменял строки, которые нужно подставить для Linux) и попытался собрать

make

Компиляция пошла, но вскоре терминал выдал:

...expect 4 shift/reduce conflicts:
yacc -d grammar.y
make[1]: yacc: Команда не найдена
Makefile:52: ошибка выполнения рецепта для цели «grammar.c»
make[1]: *** [grammar.c] Ошибка 127
make[1]: выход из каталога «/home/lootsik/sr/sr»
Makefile:23: ошибка выполнения рецепта для цели «all»
make: *** [all] Ошибка 2

При каждой новой попытке изменить что-либо в к Configuration, эффект не менялся. В линуксе новичок, чувствую что что-то не так сделал, но не знаю что, и как это исправить, помогите пожалуйста.

yacc -d grammar.y
make[1]: yacc: Команда не найдена

Ну неужели так трудно прочитать этот вывод самому?

У тебя yacc не установлен. Попробуй sudo apt-get install yacc

Кстати, используй в следующий раз теги [code] [/code] или [inline] [/inline]

Xenius ★★★★★ ()
Последнее исправление: Xenius (всего исправлений: 2)
Ответ на: комментарий от Xenius

Установил, появилась новая ошибка:

 
<встроенное>: ошибка выполнения рецепта для цели «print.o»
make[1]: *** [print.o] Ошибка 1
make[1]: выход из каталога «/home/lootsik/sr/sr»
Makefile:23: ошибка выполнения рецепта для цели «all»
make: *** [all] Ошибка 2 
Перед этим несколько ошибок типа:
undeclared (first use in this function)

Lootsik ()
Ответ на: комментарий от tailgunner

Да. Я ещё пробовал поставить старые версии, но они тоже выбивали ошибки при компиляции, в разных местах, вне зависимости от того, менял ли я файл Configuration или нет.

Lootsik ()
Ответ на: комментарий от Lootsik

sr.tar.z - это символьная ссылку, указывающая на архив с последней версией исходного кода, а именно 2.3.3. Файл с этой версией датирован 2005 годом, в архиве с исходными кодами эта версия датирована 18 января 2005 года:

SR Version 2 Change Log

2.3.3 January 18, 2005 Optimize arrays of sems in resource bodies Prevent some invalid optimizations of ops Improve portability to OpenBSD Convert library to use <stdarg.h> instead of <varargs.h> Convert from sys_errlist to strerror() Fix problem with csp2sr code generation Convert srlatex for modern versions of latex (latex2e) Check for appropriate optimization in some vsuite tests Other minor vsuite fixes and enhancements

В виду того, что в современных версиях компилятора gcc изменились требования к коду, что-то он теперь считает ошибками, что ранее допускалось. Так же в виду того, что в современных системах linux поменялись сильно системные библиотеки, их заголовочные файлы, то не факт что на системе 2017 года ты соберёшь код 2005 года.

Так что тебе нужно установить систему года так 2005, думаю Debian Sarge или Etch подойдёт. Второй будет тебе проще поставить.

Так что ставь Debian указанных версий и пробуй собрать этот исходный код, в современной системе собрать этот компилятор у тебя не получится.

Потом можешь попробовать перенести собранные бинарники в современный дистрибутив.

Удачи.

kostik87 ★★★★★ ()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от Lootsik

Установил, появилась новая ошибка:

Ага, в которой тобой тщательно вырезаны ключевые слова для понимания причины происходящего.

В общем надо смотреть что именно там undeclared и искать где именно это должно быть декларировано. Вероятно требуется доустановить библиотеки в которых это есть.

Собраться может и соберётся даже в новом дистрибутиве, главное смотреть, чего не хватает и доустанавливать. Иногда патчить ошибки.

Xenius ★★★★★ ()
Последнее исправление: Xenius (всего исправлений: 1)
Ответ на: комментарий от Xenius

Собраться может, но я повторюсь, если с кодом всё в порядке и что-либо не посчитает ошибкой новая версия компилятора.

В Gentoo были случае когда некоторые пакеты не собирались более новой версией компилятора, к примеру версией 4.8.x не собирается пакет, а версией 4.6.x - собирается.

А тут ещё больший разрыв от версии компилятора которая была в 2005 году до текущей.

kostik87 ★★★★★ ()
Ответ на: комментарий от Xenius

Весь ответ терминала

cmp -s multi/uni.h srmulti.h || cp multi/uni.h srmulti.h
cmp -s multi/uni.c srmulti.c || cp multi/uni.c srmulti.c
cd sr; make CC="cc" CFLAGS="-g "
make[1]: вход в каталог «/home/lootsik/sr/sr»
cc -g -c -o print.o print.c
In file included from compiler.h:11:0,
from print.c:6:
../util.h:20:8: warning: type defaults to ‘int’ in declaration of ‘spawn’ [-Wimplicit-int]
extern spawn(); /* fork and exec */
^
print.c: In function ‘ptree’:
print.c:36:5: warning: format not a string literal and no format arguments [-Wformat-security]
printf (spacing);
^
print.c:53:3: warning: format not a string literal and no format arguments [-Wformat-security]
printf (spacing);
^
print.c:58:3: warning: format not a string literal and no format arguments [-Wformat-security]
printf (spacing);
^
print.c: In function ‘pnode’:
print.c:93:11: warning: format ‘%X’ expects argument of type ‘unsigned int’, but argument 2 has type ‘struct node *’ [-Wformat=]
printf ("%08X [?!]", e->e_l);
^
print.c: In function ‘plist’:
print.c:146:2: warning: format not a string literal and no format arguments [-Wformat-security]
printf (spacing);
^
print.c: In function ‘pstab’:
print.c:180:2: warning: format not a string literal and no format arguments [-Wformat-security]
printf (spacing);
^
print.c: In function ‘symtos’:
print.c:437:8: warning: implicit declaration of function ‘strlen’ [-Wimplicit-function-declaration]
bp += strlen (buf);
^
print.c:437:8: warning: incompatible implicit declaration of built-in function ‘strlen’
print.c:437:8: note: include ‘<string.h>’ or provide a declaration of ‘strlen’
print.c: In function ‘oprtos’:
print.c:454:21: error: ‘operator_names’ undeclared (first use in this function)
return getname (operator_names, NELEM (operator_names), "O", (int) mytok);
^
print.c:454:21: note: each undeclared identifier is reported only once for each function it appears in
print.c: In function ‘kindtos’:
print.c:461:21: error: ‘kind_names’ undeclared (first use in this function)
return getname (kind_names, NELEM (kind_names), "K", (int) kind);
^
print.c: In function ‘typetos’:
print.c:468:21: error: ‘type_names’ undeclared (first use in this function)
return getname (type_names, NELEM (type_names), "T", (int) type);
^
print.c: In function ‘varitos’:
print.c:475:21: error: ‘variety_names’ undeclared (first use in this function)
return getname (variety_names, NELEM (variety_names), "V", (int) vty);
^
<встроенное>: ошибка выполнения рецепта для цели «print.o»
make[1]: *** [print.o] Ошибка 1
make[1]: выход из каталога «/home/lootsik/sr/sr»
Makefile:23: ошибка выполнения рецепта для цели «all»
make: *** [all] Ошибка 2

Lootsik ()
Ответ на: комментарий от Lootsik

gcc детектирует кривокод и ругается. Как видишь, ошибки в print.c, нужно смотреть что там такое и исправлять.

Xenius ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.