Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 28 мар 2024, 15:00

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
СообщениеДобавлено: 13 янв 2018, 14:22 
Не в сети

Сообщения: 146
ivan_denisov писал(а):
Пересобрал исправленный вариант, вроде работает пример.
А как собрать без сервера? В README не хватает какого-то примера, как из терминала просто откомпилировать код на Oberon-07.

Сам транслятор выдаёт справку о способах использования, если его запустить без параметров или с командой help. Но Ваше замечание дельно, я не учёл желания многих увидеть примеры сразу в README, потому что сам я предпочитаю справку непосредственно по месту, а не в браузере.
Недавно я приступил к замене Makefile для сборки и тестирования на скрипт, написанный на самом же Обероне, поэтому, на самом деле, справка по сборке в README, в определённой степени, уже даёт представление о том как пользоваться транслятором.
Если Вы находитесь в корневом каталоге проекта, то так может выглядеть работа с ним:
Код: "OBERON"
  1. $ # Непосредственный запуск процедуры модуля:
  2. $ result/o7c run 'Out.String("Hello"); Out.Ln' -infr .
  3. $ # Сборка исполняемого файла:
  4. $ result/o7c to-bin 'Out.String("Hello"); Out.Ln' result/Hello -infr .
  5. $ result/Hello
  6.  


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 13 янв 2018, 14:34 
Не в сети

Сообщения: 146
Comdiv писал(а):
Странно, что запуск сервера позволен только от root, ведь это нежелательное действие. Вы не Ubuntu используете?

У меня так же, просто я этого не замечал, всегда используя порт 8080, который доступен и без прав root.


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 13 янв 2018, 18:31 
Не в сети
Администратор
Аватара пользователя

Сообщения: 108
Так и не понял всё равно
./o7c to-bin Hello.mod Hello -infr
Выдает ошибку Not enough count of arguments for command: to-bin
Как указать файл для компиляции?


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 13 янв 2018, 22:12 
Не в сети

Сообщения: 146
Обратите внимание, что транслятор работает не с файлами, как это принято в языках, где понятие программы привязано к файлу, а с командами, состоящие из имени модуля, точки и имени процедуры как в ОС Оберон и ей подобных. Правда, я расширил понятие команды и позволил использовать как процедуры с параметрами, так и указывать только имя модуля, в случае чего будет выполнена только секция инициализации. Поэтому указывать имя файла бесполезно. Если модуль Hello не содержит экспортированную процедуру mod, то транслятор сообщит об ошибке. Для указанной Вами команды было сообщено о другой ошибке, потому что опция -infr требует указания пути к инфраструктуре. В моём примере это была малоприметная точка, что, естественно, означало текущий каталог.

Если же модуль Hello.mod с кодом в секции инициализации Вы положили в каталог result и оттуда хотите его собрать, то команда должна выглядеть так:
Код: "OBERON"
  1. $ ./o7c to-bin Hello Hello -infr .. -m .
Опция -m используется для указания пути для поиска модулей.

Спасибо Вам за деятельный интерес. Теперь я вижу, что если для человека, знакомого с Оберон, сборка показалась непонятной, то для стороннего человека это, наверно, тем более будет выглядеть дремучим лесом. Я постараюсь поправить справку.


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 17 янв 2018, 07:48 
Не в сети
Администратор
Аватара пользователя

Сообщения: 108
Теперь получилось:
Код: "OBERON"
  1. ivan@dell:~/oberon/vostok-master/result$ ./o7c to-bin Hello Hello -infr .. -m .
  2. ivan@dell:~/oberon/vostok-master/result$ ./Hello
  3. Привет мир!!!
  4.  


Вот такой был модуль:
Код: "OBERON"
  1. MODULE Hello;
  2.  
  3. IMPORT Out;
  4.  
  5. BEGIN
  6. Out.String("Привет мир!!!"); Out.Ln;
  7. END Hello.
  8.  


Очень приятно, что поддерживается сразу корректная работа с Кириллицей.

немного неочевидное название для папки result, обычно называют bin


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 17 янв 2018, 08:43 
Не в сети
Администратор
Аватара пользователя

Сообщения: 108
А какой формат ELF получается? 64-битный ?
Вроде вижу /lib64/ld-linux-x86-64.so.2


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 17 янв 2018, 11:59 
Не в сети

Сообщения: 146
ivan_denisov писал(а):
Очень приятно, что поддерживается сразу корректная работа с Кириллицей.
С кириллицей работает только в строках, да и это лишь следствие всеобщего UTF-8 в GNU/Linux. Ничего специального я не делал. Иероглифы тоже поддерживаются.
ivan_denisov писал(а):
немного неочевидное название для папки result, обычно называют bin
Я давно перестал так называть, потому что в общем случае результат это не только двоичные данные. Да и двоичные данные могут быть исходным кодом, как известно. В слове result больше смысла в данном контексте.


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 17 янв 2018, 12:05 
Не в сети

Сообщения: 146
ivan_denisov писал(а):
А какой формат ELF получается? 64-битный ?
Вроде вижу /lib64/ld-linux-x86-64.so.2
Для сборки используется компилятор Си. По умолчанию это 'сс -g -O1'. В 64-битной системе такая строка будет приводить к 64-битному исполняемому коду. Если транслятору o7c передать параметр -cc 'cc -m32', то на выходе будет 32-битный исполнимый код. Аналогично можно собрать под arm, к примеру.


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 17 янв 2018, 14:21 
Не в сети
Администратор
Аватара пользователя

Сообщения: 108
А как собрать с помощью такого компилятора библиотеку? Можете сделать небольшой пример, пожалуйста.


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 17 янв 2018, 16:07 
Не в сети

Сообщения: 146
В первую очередь создаётся то, что нужно сейчас. Так как мне до сих пор не нужны были библиотеки, то и возможности их собрать непосредственно из транслятора нет. Но благодаря трансляции в Си, есть возможность делать всё то же, что и для обычного Си-кода, в том числе, и сбор библиотеки.

Например, так:
Код: "BASH"
vostok $ mkdir result/Hello-с
vostok $ result/o7c to-c Hello result/Hello-с -infr . -m test/source
vostok $ cc -fPIC result/Hello-с/*.c singularity/implementation/*.c -Iresult/Hello-с -Isingularity/implementation -lm -shared -o result/libHello.so
 

Используем библиотеку:
Код: "C"
#include <o7.h>
#include "Hello.h"
 
int main(void) {
Hello_init();
Hello_Go();
return 0;
}

Код: "BASH"
vostok $ cc hello.c -lHello -lm -Lresult -Iresult/Hello-c -Isingularity/implementation -o result/hello
vostok $ LD_LIBRARY_PATH=result result/hello


Последний раз редактировалось Comdiv 18 янв 2018, 00:36, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


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

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
© VEDAsoft Oberon Club