ПО, ЭВМ и АСУ из Таможенного Союза

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » ПО, ЭВМ и АСУ из Таможенного Союза » Проект "Виртуальные машины" » Установка Сказочной Колесницы в Gentoo


Установка Сказочной Колесницы в Gentoo

Сообщений 31 страница 60 из 80

31

Евгений написал(а):

как сделать так, чтобы именно у меня запускалась 10-я версия? Просто у меня только она русифицированная.

Отвечает ChatGPT:

«необходимо использовать макрос AC_PROC_CC»

А вот stackoverflow говорит, что есть какой-то другой макрос:

https://stackoverflow.com/questions/194 … -autotools

Надо ещё выяснить, на соответствие какому стандарту мы его хотим проверить.

«2011-12-19, в стандарте C11 (ISO/IEC 9899/2011) была добавлена возможность писать идентификаторы в Юникоде»

«Действующий с 2018 года стандарт C18[en] (он же C17) фактически является уточнённым вариантом C11, исправляющим найденные в стандарте ошибки»

AC_PROC_CC([gcc], [-std=c18])

Отредактировано Лис (2023-03-13 00:35:54)

0

32

Всё, я победил и эту проблему. По этому руководству.

0

33

Евгений написал(а):

Всё, я победил и эту проблему. По этому руководству.

а стал дописывать проверку
AC_PROC_CC([gcc], [-std=c18])

?

0

34

Лис написал(а):

а стал дописывать проверку
AC_PROC_CC([gcc], [-std=c18])

А надо?

Код:
configure.ac:6: error: possibly undefined macro: AC_PROC_CC
      If this token and others are legitimate, please use m4_pattern_allow.
      See the Autoconf documentation.
autoreconf: error: /usr/bin/autoconf failed with exit status: 1

0

35

Евгений написал(а):

А надо?

Мне - не надо.

У меня другая проблема теперь:

Код:
Компиляция C/C++: .src/main.c
gcc -c -Os -Wall -MD -MF bin/.dep/main.o.d -I./include  -o  bin/obj/main.o .src/main.c
Компиляция C/C++: .src/vm.c
gcc -c -Os -Wall -MD -MF bin/.dep/vm.o.d -I./include  -o  bin/obj/vm.o .src/vm.c
src_rus/main.r: In function ‘main’:
src_rus/main.r:23:7: warning: variable ‘имя_файла’ set but not used [-Wunused-but-set-variable]
   23 | симв* имя_файла = NULL;
      |       ^~~~~~~~~

Сборка: proba
gcc  -o proba bin/obj/main.o bin/obj/vm.o
make[1]: Leaving directory '/var/tmp/portage/app-emulation/sk-1.0.0/work/app-emulation-sk-1.0.0/mashines/intel64'
 * ERROR: app-emulation/sk-1.0.0::plana-gentoo failed (compile phase):
 *   emake failed

0

36

Может не AC_PROC_CC([gcc], [-std=c18]), а AC_PROG_CC([gcc], [-std=c18])?

0

37

Евгений написал(а):

Может не AC_PROC_CC([gcc], [-std=c18]), а AC_PROG_CC([gcc], [-std=c18])?

Да. Буква G правильная.

Вот ещё:

Код:
Компиляция C/C++: .src/main.c
gcc -c -Os -Wall -MD -MF bin/.dep/main.o.d -I./include  -o  bin/obj/main.o .src/main.c
Компиляция C/C++: .src/vm.c
gcc -c -Os -Wall -MD -MF bin/.dep/vm.o.d -I./include  -o  bin/obj/vm.o .src/vm.c
src_rus/main.r:13:6: fatal error: ../mashines/intel64/.src/interface.h: No such file or directory
   13 | #вставка        "../mashines/intel64/.src/interface.h"
      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile:816: bin/obj/main.o] Error 1
make: *** Waiting for unfinished jobs....

0

38

Похоже sed неправильно отрабатывает. Посмотри main.c в папке .src

0

39

Евгений написал(а):

Похоже sed неправильно отрабатывает. Посмотри main.c в папке .src

Мне неясно, что я там должен увидеть.

/var/tmp/portage/app-emulation/sk-1.0.0/work/app-emulation-sk-1.0.0/.src # file ../mashines/intel64/.src/interface.h
../mashines/intel64/.src/interface.h: C source, Unicode text, UTF-8 text
/var/tmp/portage/app-emulation/sk-1.0.0/work/app-emulation-sk-1.0.0/.src # stat ../mashines/intel64/.src/interface.h
  Файл: ../mashines/intel64/.src/interface.h
  Размер: 4947      Блоков: 16         Блок В/В: 4096   обычный файл
Устройство: 252/0 Инода: 6168112     Ссылки: 1
Доступ: (0644/-rw-r--r--)  Uid: (  250/ portage)   Gid: (  250/ portage)
Доступ:        2023-03-13 00:53:18.352243266 +0300
Модифицирован: 2023-03-13 00:53:18.358909976 +0300
Изменён:       2023-03-13 00:53:18.358909976 +0300
Создан:        2023-03-13 00:53:18.352243266 +0300

0

40

Не понятно пока...

0

41

Во-первых, ошибка происходит при компиляции файла ".src/vm.c", но такого файла не вижу.

Во-вторых, директорию было бы правильно назвать machines а не mashines. Засмеют читатели новостей. Хотя такой проект, что это национальный колорит...

# find . | grep  .src/vm.c
./mashines/intel64/.src/vm_core.h
./mashines/intel64/.src/vm.c
./mashines/evgeny/.src/vm_core.h
./mashines/evgeny/.src/vm.c

Из любого из этих файлов относительный путь ../mashines/intel64/.src/interface.h
не сработает.

Отредактировано Лис (2023-03-13 01:07:32)

0

42

А все полностью сообщение можно глянуть? Всю портянку.

0

43

Евгений написал(а):

А все полностью сообщение можно глянуть? Всю портянку.

там:
http://dpaste.com/363WCR9MX

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

Лог относится к коммиту
d97e8778f8d51c45a37561a035916fc309a2b9f6

Отредактировано Лис (2023-03-13 01:12:22)

0

44

Лис написал(а):

Во-вторых, директорию было бы правильно назвать machines а не mashines. Засмеют читатели новостей. Хотя такой проект, что это национальный колорит.

Ржу. Я из английского знаю только старт и стоп. Но поправим)

0

45

У меня ощущение, что сборка идет в несколько потоков. Все сообщения перепутаны. Попробуй make -j 1 all

Отредактировано Евгений (2023-03-13 01:16:49)

0

46

Лис написал(а):

Лог относится к коммиту
d97e8778f8d51c45a37561a035916fc309a2b9f6

Все верно, это самый свежий

0

47

Вот полный выхлоп сборки:

Код:
-------- Начало ---------
make[1]: вход в каталог «/home/evgeny/Документы/Проекты/VM_02/mashines/evgeny»

-------- Начало ---------

Размер программы до:
   text    data     bss     dec     hex filename
   7028     768      16    7812    1e84 proba


Компиляция C/C++: .src/main.c
gcc -c -Os -Wall -MD -MF bin/.dep/main.o.d -I./include  -o  bin/obj/main.o .src/main.c
src_rus/main.r: В функции «main»:
src_rus/main.r:23:11: предупреждение: переменная «имя_файла» определена, но не используется [-Wunused-but-set-variable]
   23 | симв* имя_файла = NULL;
      |       ^~~~~~~~~

Компиляция C/C++: .src/vm.c
gcc -c -Os -Wall -MD -MF bin/.dep/vm.o.d -I./include  -o  bin/obj/vm.o .src/vm.c

Сборка: proba
gcc  -o proba bin/obj/main.o bin/obj/vm.o

Размер программы после:
   text    data     bss     dec     hex filename
   7028     768      16    7812    1e84 proba

make[1]: выход из каталога «/home/evgeny/Документы/Проекты/VM_02/mashines/evgeny»
make[1]: вход в каталог «/home/evgeny/Документы/Проекты/VM_02/mashines/intel64»

-------- Начало ---------

Размер программы до:
   text    data     bss     dec     hex filename
   3352     768      16    4136    1028 proba


Компиляция C/C++: .src/main.c
gcc -c -Os -Wall -MD -MF bin/.dep/main.o.d -I./include  -o  bin/obj/main.o .src/main.c
src_rus/main.r: В функции «main»:
src_rus/main.r:23:11: предупреждение: переменная «имя_файла» определена, но не используется [-Wunused-but-set-variable]
   23 | симв* имя_файла = NULL;
      |       ^~~~~~~~~

Компиляция C/C++: .src/vm.c
gcc -c -Os -Wall -MD -MF bin/.dep/vm.o.d -I./include  -o  bin/obj/vm.o .src/vm.c

Сборка: proba
gcc  -o proba bin/obj/main.o bin/obj/vm.o

Размер программы после:
   text    data     bss     dec     hex filename
   3352     768      16    4136    1028 proba

make[1]: выход из каталога «/home/evgeny/Документы/Проекты/VM_02/mashines/intel64»

Русский в C/C++:
sed '1s/^/#line 1 "src_rus\/ansicode.rh"\n/' src_rus/ansicode.rh | sed -f ru-to-c > .src/ansicode.h

Русский в C/C++:
sed '1s/^/#line 1 "src_rus\/debug.rh"\n/' src_rus/debug.rh | sed -f ru-to-c > .src/debug.h

Русский в C/C++:
sed '1s/^/#line 1 "src_rus\/main.r"\n/' src_rus/main.r |  sed  -f ru-to-c > .src/main.c

Компиляция C/C++: .src/main.c
gcc -c -Os -Wall -MD -MF bin/.dep/main.o.d -I./include  -o  bin/obj/main.o .src/main.c
src_rus/main.r: В функции «main»:
src_rus/main.r:28:11: предупреждение: переменная «имя_файла» определена, но не используется [-Wunused-but-set-variable]
   28 | симв* имя_файла = NULL;
      |       ^~~~~~~~~

Сборка: sk
gcc  -o sk bin/obj/main.o mashines/evgeny/bin/obj/vm.o mashines/intel64/bin/obj/vm.o

Размер программы после:
   text    data     bss     dec     hex filename
   7355     768      16    8139    1fcb sk

0

48

Евгений написал(а):

У меня ощущение, что сборка идет в несколько потоков.

Так и есть. У меня же многоядерная машина.

Евгений написал(а):

Все сообщения перепутаны.
Попробуй make -j 1 all

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

0

49

$ equery files sk
* Searching for sk ...
* Contents of app-emulation/sk-1.0.0:
/usr
/usr/bin
/usr/bin/sk
/usr/lib
/usr/lib/debug
/usr/lib/debug/usr
/usr/lib/debug/usr/bin
/usr/lib/debug/usr/bin/sk.debug
$ file /usr/bin/sk
/usr/bin/sk: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, stripped
$ /usr/bin/sk --help
использование: /usr/bin/sk --mashine=<nameVM> <filename_byte_code>
-h это сообщение
-m nameVM  имя виртуальной машины
--help это сообщение
--mashine=nameVM  имя виртуальной машины
пример:
/usr/bin/sk --machine=kumir moj_bait_kod.bytes
/usr/bin/sk -m kumir moj_bait_kod.bytes

--help не выводит версию программы.

Вообще мне вся установка не очень нравится, но я пока не знаю как надо.

Что если будет две версии, а тут программа лежит по пути
/usr/bin/sk
это же симлинк должен быть. И для его установки делают специальные пакеты, а я не могу, место занято.

Отредактировано Лис (2023-03-13 01:33:54)

0

50

пример:
/usr/bin/sk --machine=kumir moj_bait_kod.bytes
/usr/bin/sk -m kumir moj_bait_kod.bytes

Пользователи же введут именно то, что написано в примере. А оно не заработает.

$ /usr/bin/sk -m --help moj_bait_kod.bytes
Виртуальная машина --help не найдена
$ /usr/bin/sk -m ? moj_bait_kod.bytes
Виртуальная машина ? не найдена

Вот как делают акулы:

$ qemu-system-x86_64 -machine ? | grep "^pc "
pc                   Standard PC (i440FX + PIIX, 1996) (alias of pc-i440fx-7.2)

$ qemu-system-x86_64 -cpu ? | grep x86 | grep 64
x86 kvm64                 (alias configured by machine type)
x86 kvm64-v1              Common KVM processor
x86 qemu64                (alias configured by machine type)
x86 qemu64-v1             QEMU Virtual CPU version 2.5+

Отредактировано Лис (2023-03-13 02:06:50)

0

51

Лис написал(а):

$ /usr/bin/sk -m --help moj_bait_kod.bytes
Виртуальная машина --help не найдена

Стандартная библиотека и стандартное поведение.
Например: gcc -o --help
gcc: fatal error: no input files
compilation terminated.

А вот sk -m intel64 --help нужно, чтобы работало. Но в данном случае, эта справка за разработчиком конкретной ВМ.

Отредактировано Евгений (2023-03-13 08:32:29)

0

52

Лис написал(а):

Евгений написал(а):
Все сообщения перепутаны.
Попробуй make -j 1 all

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

С этим я подумаю, но могут быть сложности.

Вспомнилось... Я однажды раз десять пытался собрать в Linux компилятор avr-gcc для Windows на разных машинах. И каждый раз сборка падала.
Больших трудов стоило понять, что ошибка возникает из-за многопочности.

Отредактировано Евгений (2023-03-13 10:33:22)

0

53

Обновил ветку. Можно проверить, собирается ли без ключа -j1.

0

54

Проверил, коммит "09660fedadf3eb2faf91efe89e42eeb59b949d27" не работает.

0

55

Лис написал(а):

Проверил, коммит "09660fedadf3eb2faf91efe89e42eeb59b949d27" не работает.

Пока идей нет, как это победить...

Прикрутил autotools на ветке одиночного проекта devel-1

Отредактировано Евгений (2023-03-13 22:47:56)

0

56

Евгений написал(а):

Пока идей нет, как это победить...

Для победы нужно:

1) изготовить минимальный пример, демонстрирующий проблему
(когда вы сами запускаете make с параметром j4 и оно не работает).

2) поискать возможное решение в интернете

3) если понятно не станет, запостить пример и историю размышлений туда, где много разбирающихся людей (то есть на linux.org.ru).

0

57

Проблема как раз понятна. Дело в том, что по логике сначала должны собираться вложенные проекты, а потом проект-оболочка, так как ему нужны объектные и заголовочные файлы из вложенных проектов. Но запускается несколько процессов, и к моменту сборки оболочки, файлы из вложенных не готовы. Не понятно, как выкрутится. И очень трудно написать явную зависимость, так как на момент запуска еще не известно сколько именно объектных файлов понадобится.
За легкость добавления проекта в мультипроект приходится платить сборкой в один процесс.

Отредактировано Евгений (2023-03-13 23:07:39)

0

58

Евгений написал(а):

Проблема понятна. ... Не понятно, как выкрутится.

Спросить там где много специалистов как такая проблема решается.
Может кто-то сталкивался с такой проблемой и знает.
Здесь людей мало и этот способ на этом форуме не сработает.

Отредактировано Лис (2023-03-13 23:39:04)

0

59

Вот что на эту тему пишет ChatGPT:

Можно использовать динамический подход к созданию зависимостей.
Для этого можно использовать команду $(wildcard).

Примерно так:
SUBDIRS := $(wildcard */)
OBJS := $(foreach dir , $(SUBDIRS), $(wildcard $(dir)*.o))

all: $(OBJS)
   # команды для сборки цели

У меня команды с именем wildcard нет в системе, но вообще в принципе-то идея рабочая? В смысле, получить список директорий, а потом при помощи foreach собрать список всех файлов в них?

Зачем вообще нужны эти вложенные Makefile, почему нельзя обойтись одним в корне, в котором прописать все зависимости,
в том числе и от .h-файлов?

Отредактировано Лис (2023-03-13 23:37:51)

0

60

https://stackoverflow.com/questions/138 … irectories

может быть wildcard это не утилита командной строки, а какая-то встроенная команда то-ли bash, то-ли make?

Отредактировано Лис (2023-03-13 23:49:38)

0


Вы здесь » ПО, ЭВМ и АСУ из Таможенного Союза » Проект "Виртуальные машины" » Установка Сказочной Колесницы в Gentoo