OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Среда, 24 Апрель, 2019 05:03

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




Начать новую тему Ответить на тему  [ Сообщений: 105 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Автор Сообщение
 Заголовок сообщения: Re: Что с oo2c?
СообщениеДобавлено: Воскресенье, 17 Июль, 2011 07:28 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2296
Откуда: Россия, Санкт-Петербург
Переместил исходники GC в каталог /usr/local/src/libgc, что соответствует d:\Programs\Dev\MinGW\msys\1.0\local\src\libgc, затем выполнил команду "./configure && make && make gctest.exe && ./gctest.exe && cat gc.log && make install". Всё отработало нормально.

Распаковал исходники oo2c в каталог /usr/local/src/oo2c, что соответствует d:\Programs\Dev\MinGW\msys\1.0\local\src\oo2c, затем выполнил следующие команды в соответствии с readme.win32:
Код:
env "INSTALL=d:/Programs/Dev/MinGW/msys/1.0/bin/install.exe" LDFLAGS=-L/usr/local/lib CFLAGS=-O2 "CPPFLAGS=-I/usr/local/include -DGC_WIN32_THREADS"
./configure --disable-libs
make
make install
Последняя команда выдала ошибку:
/usr/bin/install -c -d d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/obj/ADT
make: *** [install] Error 1


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что с oo2c?
СообщениеДобавлено: Воскресенье, 17 Июль, 2011 07:58 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2296
Откуда: Россия, Санкт-Петербург
Проблема, похоже, просто в том, что не удаётся создать указанный каталог .../ADT. Ручное выполнение /usr/bin/install приводит к успешному созданию каталога. После этого запуск make install сваливается уже с другой ошибкой:
/usr/bin/install -c -m 644 lib/obj/ADT/ArrayList.o d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/obj/ADT
make: *** [install] Error 1

Ручное выполнение этой же самой команды приводит к успешному копированию файла. Не могу понять, в чём проблема.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что с oo2c?
СообщениеДобавлено: Воскресенье, 17 Июль, 2011 08:53 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2296
Откуда: Россия, Санкт-Петербург
Ошибка возникает при выполнении строки 173 файла oo2c/Makefile:
$(BOOTSTRAP_COMPILER) --config oo2crc-install.xml -v --bindir "$(bindir)" --libdir "$(libdir)" --oocdir "$(oocdir)" -r lib -r . --install-program "$(INSTALL_PROGRAM)" $(OFLAGS) --install-package liboo2c

Переменная "$(INSTALL_PROGRAM)" задана в файле Makefile.config:
INSTALL=/usr/bin/install -c
INSTALL_PROGRAM=${INSTALL}

Попытка в строке 173 заменить "$(INSTALL_PROGRAM)" на "echo" не изменяет выдаваемое сообщение об ошибке. Всё равно производится выполнение команды "/usr/bin/install -c". Значит, параметр --install-program игнорируется.

$(BOOTSTRAP_COMPILER) = stage0/oo2c
В файле stage0/oo2c.exe прописаны команды "install -c" и "install -c -m 644", используемые при компиляции. Вторая команда находится рядом со строкой "installData", которая, в свою очередь, встречается рядом с текстом "--install-data".

Добавление параметра --install-data "echo" в строку 173 привело к тому, что сообщения при компиляции изменились:
echo lib/obj/ADT/ArrayList.o d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/obj/ADT
lib/obj/ADT/ArrayList.o d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/obj/ADT
echo lib/obj/ADT/ArrayList.oh d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/obj/ADT
lib/obj/ADT/ArrayList.oh d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/obj/ADT
echo lib/obj/ADT/Arrays.o d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/obj/ADT
lib/obj/ADT/Arrays.o d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/obj/ADT
echo lib/obj/ADT/Arrays.oh d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/obj/ADT
lib/obj/ADT/Arrays.oh d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/obj/ADT
echo lib/obj/ADT/Comparator.o d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/obj/ADT
lib/obj/ADT/Comparator.o d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/obj/ADT
echo lib/obj/ADT/Comparator.oh d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/obj/ADT
lib/obj/ADT/Comparator.oh d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/obj/ADT
echo lib/obj/ADT/Dictionary.o d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/obj/ADT
lib/obj/ADT/Dictionary.o d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/obj/ADT
echo lib/obj/ADT/Dictionary.oh d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/obj/ADT
lib/obj/ADT/Dictionary.oh d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/obj/ADT
/usr/bin/install -c -d d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/obj/ADT/Dictionary
make: *** [install] Error 1

Другими словами, параметр --install-data был принят, и на этот раз компиляция оборвалась на попытке создать очередной каталог.

При задании параметра --install-data "$(INSTALL_DATA)" в строке 173 каталог ADT был успешно наполнен файлами:
d:/Programs/Dev/MinGW/msys/1.0/bin/install -c -m 644 lib/obj/ADT/ArrayList.o d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/obj/ADT
d:/Programs/Dev/MinGW/msys/1.0/bin/install -c -m 644 lib/obj/ADT/ArrayList.oh d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/obj/ADT
d:/Programs/Dev/MinGW/msys/1.0/bin/install -c -m 644 lib/obj/ADT/Arrays.o d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/obj/ADT
d:/Programs/Dev/MinGW/msys/1.0/bin/install -c -m 644 lib/obj/ADT/Arrays.oh d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/obj/ADT
d:/Programs/Dev/MinGW/msys/1.0/bin/install -c -m 644 lib/obj/ADT/Comparator.o d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/obj/ADT
d:/Programs/Dev/MinGW/msys/1.0/bin/install -c -m 644 lib/obj/ADT/Comparator.oh d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/obj/ADT
d:/Programs/Dev/MinGW/msys/1.0/bin/install -c -m 644 lib/obj/ADT/Dictionary.o d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/obj/ADT
d:/Programs/Dev/MinGW/msys/1.0/bin/install -c -m 644 lib/obj/ADT/Dictionary.oh d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/obj/ADT
/usr/bin/install -c -d d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/obj/ADT/Dictionary
make: *** [install] Error 1

Хм... Кажется, я что-то читал про переменную окружения INSTALL и проблему с путями к программам.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что с oo2c?
СообщениеДобавлено: Воскресенье, 17 Июль, 2011 09:00 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2296
Откуда: Россия, Санкт-Петербург
Я не знал, что команда env изменяет содержимое переменных окружения только на время работы одной указанной программы. В результате те изменения, которые я думал, что внёс в систему, не повлияли должным образом на работу скрипта ./configure. После запуска env+configure одной строкой я увидел, что переменная INSTALL в файле Makefile.configure получила другое значение:
INSTALL=d:/Programs/Dev/MinGW/msys/1.0/bin/install.exe
INSTALL_PROGRAM=${INSTALL}
INSTALL_SCRIPT=${INSTALL}
INSTALL_DATA=${INSTALL} -m 644

Вот что значит, не заметил всего лишь один слэш в конце строки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что с oo2c?
СообщениеДобавлено: Воскресенье, 17 Июль, 2011 13:42 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2296
Откуда: Россия, Санкт-Петербург
Попробуем всё начать с начала, без ошибок и лишних шагов.

1. Качаем инсталлер MinGW и устанавливаем в каталог d:\Programs\Dev\MinGW (опции установки оставляем по умолчанию);
2. распаковываем исходники oo2c и GC в d:\Programs\Dev\MinGW\msys\1.0\local\src\{oo2c,libgc};
3. запускаем cmd.exe в каталоге libgc и выполняем: "set PATH=d:\Programs\Dev\MinGW\bin;d:\Programs\Dev\MinGW\msys\1.0\bin;%PATH%", затем "bash";
4. компилируем и устанавливаем GC: ./configure && make && make gctest.exe && ./gctest.exe && cat gc.log && make install;
5. переходим в каталог oo2c: cd ../oo2c;
6. настраиваем oo2c: env "INSTALL=d:/Programs/Dev/MinGW/msys/1.0/bin/install.exe" LDFLAGS=-L/usr/local/lib CFLAGS=-O2 "CPPFLAGS=-I/usr/local/include -DGC_WIN32_THREADS" ./configure --disable-libs
7. компилируем и устанавливаем oo2c: make && make install.

Команда "make" из седьмого пункта выдала следующую ошибку:
gcc -O2 -I/usr/local/include -DGC_WIN32_THREADS -Ilib/src -Iobj -Ilib/obj -I/usr/local/oo2c/obj -I/usr/local/oo2c/lib/obj -c D:/Programs/Dev/MinGW/msys/1.0/local/oo2c/lib/src/RT0.c -o lib/obj/RT0.o
D:/Programs/Dev/MinGW/msys/1.0/local/oo2c/lib/src/RT0.c:19:21: fatal error: gc/gc.h: No such file or directory
compilation terminated.
make: *** [lib/obj/liboo2c.la] Error

Т.е. почему-то не удалось найти файл gc/gc.h, хотя он находится в папке /usr/local/include, указанной первым номером в параметре -I. Команда cat /usr/local/include/gc/gc.h нормально выдаёт содержимое файла. Ещё более странно то, что при ручном выполнении команды компиляция проходит успешно.

Затем make сломался на команде:
gcc -o lib/bin/liboo2c -L/usr/local/lib <много файлов *.o> -lmingwex -lwsock32 -lgc -L/usr/local/lib
d:/programs/dev/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../../mingw32/bin/ld.exe: cannot find -lgc
collect2: ld returned 1 exit status
make: *** [lib/obj/liboo2c.la] Error 1

Другими словами, не получается найти только что скомпилированный и установленный GC. В каталоге /usr/local/lib присутствуют файлы libgc.a, libgc.la:
bash-3.1$ ls /usr/local/lib
libgc.a libgc.la

Что самое странное, ручной запуск команды приводит НЕ к сообщению об ошибке, а к успешному созданию файла d:\Programs\Dev\MinGW\msys\1.0\local\oo2c\lib\bin\liboo2c.exe. Опять не могу понять, где проблема с путями.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что с oo2c?
СообщениеДобавлено: Воскресенье, 17 Июль, 2011 15:41 

Зарегистрирован: Среда, 04 Июль, 2007 16:43
Сообщения: 233
Может стоит cygwin попробовать? Когда последний раз пробовал, oo2c устанавливался без проблем. Если есть насущная необходимость позже не использовать cygwin, то http://www.mingw.org/wiki/FAQ:
Цитата:
How do I use MinGW with Cygwin? For those who would like to use the Cygwin environment for development, yet generate non-Cygwin-dependant executables, a much easier option to "-mno-cygwin" does exist. Simply install Cygwin and the MinGW distribution in separate directories (i.e. "C:\CYGWIN" and "C:\MINGW"), and make sure that the "/bin" subdirectory beneath your MinGW installation comes before Cygwin's "/bin" subdirectory in your PATH environment variable (i.e. "PATH=%PATH%;C:\MINGW\BIN;C:\CYGWIN\BIN"). This will allow you access to all the UNIX tools you want, while ensuring that the instance of GCC used is the MinGW version. %%%
Bear in mind that within the "/etc/profile" file, Cygwin by default places "/usr/local/bin", "/usr/bin", and "/bin" ahead of your system-level PATH. Therefore, it is not enough to have the MinGW's "/bin" ahead of Cygwin in your Windows path... it must also be set to come first within the Cygwin environment (either by modifying "/etc/profile" or setting it manually).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что с oo2c?
СообщениеДобавлено: Воскресенье, 17 Июль, 2011 18:54 

Зарегистрирован: Суббота, 06 Июнь, 2009 07:52
Сообщения: 329
Александр Ильин писал(а):
Т.е. почему-то не удалось найти файл gc/gc.h, хотя он находится в папке /usr/local/include, указанной первым номером в параметре -I. Команда cat /usr/local/include/gc/gc.h нормально выдаёт содержимое файла. Ещё более странно то, что при ручном выполнении команды компиляция проходит успешно.

Попробуйте проверить в исходниках подключение хейдеров

#include “file.h” – находятся в текущей директории.
#include </.../file.h> -- находятся в системной директории.

Может, пути остались другие…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что с oo2c?
СообщениеДобавлено: Воскресенье, 17 Июль, 2011 19:29 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2296
Откуда: Россия, Санкт-Петербург
id_ler писал(а):
Александр Ильин писал(а):
Т.е. почему-то не удалось найти файл gc/gc.h, хотя он находится в папке /usr/local/include, указанной первым номером в параметре -I. Команда cat /usr/local/include/gc/gc.h нормально выдаёт содержимое файла. Ещё более странно то, что при ручном выполнении команды компиляция проходит успешно.

Попробуйте проверить в исходниках подключение хейдеров

#include “file.h” – находятся в текущей директории.
#include </.../file.h> -- находятся в системной директории.

Может, пути остались другие…
Проверил, там угловые скобки. Спасибо за совет, но не то.

Было обнаружено, что если в файле oo2crc-install.xml параметру ldflags вместо /usr/local/lib задать значение d:\Programs\Dev\MinGW\msys\1.0\local\lib, то компиляция проходит успешно. Для того, чтобы файл gc/gc.h был найден при компиляции, в том же xml-файле нужно в параметре cppflags заменить -I/usr/local/include на полный DOS-путь к local/include. Данный xml-файл формируется при выполнении ./configure, а значит, можно данные значения прописать в команде env (см. readme.win32). Другой способ - добавить пути к lib и include в переменную окружения PATH.

Поскольку я решил добиться стабильного воспроизведения процесса инсталляции, был написан командный bat-файл. Здесь приводится вариант с модификацией PATH, так как он мне кажется более надёжным (я пока не до конца понимаю предупреждения о смешивании DOS- и Unix-путей в readme.win32). В комментариях присутствует альтернативный способ с настройкой ./configure через env. Второй способ тоже работает.
Код:
rm -rf local
md local
md local\src
cp -R e:\Distrib\Tools\OO2C\gc6.8 local\src
mv local\src\gc6.8 local\src\libgc
cp -R e:\Distrib\Tools\OO2C\oo2c_32-2.1.11 local\src
mv local\src\oo2c_32-2.1.11 local\src\oo2c
set PATH=d:\Programs\Dev\MinGW\bin;d:\Programs\Dev\MinGW\msys\1.0\bin;d:\Programs\Dev\MinGW\msys\1.0\local\lib;d:\Programs\Dev\MinGW\msys\1.0\local\include;%PATH%
rem also works: set PATH=d:\Programs\Dev\MinGW\bin;d:\Programs\Dev\MinGW\msys\1.0\bin;%PATH%
cd local\src\libgc
bash -c ./configure && bash -c make && bash -c "make gctest.exe" && gctest.exe && cat gc.log &&  bash -c "make install"
cd ..\oo2c
bash -c "env INSTALL=d:/Programs/Dev/MinGW/msys/1.0/bin/install.exe CFLAGS=-O2 CPPFLAGS=-DGC_WIN32_THREADS ./configure --disable-libs"
rem also works: bash -c "env INSTALL=d:/Programs/Dev/MinGW/msys/1.0/bin/install.exe LDFLAGS=-Ld:/Programs/Dev/MinGW/msys/1.0/local/lib CFLAGS=-O2 \"CPPFLAGS=-Id:/Programs/Dev/MinGW/msys/1.0/local/include -DGC_WIN32_THREADS\" ./configure --disable-libs"
bash -c make && bash -c "make install"
Поместить в каталог d:\Programs\Dev\MinGW\msys\1.0\ и запускать оттуда.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что с oo2c?
СообщениеДобавлено: Воскресенье, 17 Июль, 2011 19:39 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2296
Откуда: Россия, Санкт-Петербург
К сожалению, команда "make test" отказывается компилировать даже самый первый пример. Так что в настоящее время работоспособность компилятора мною ещё не опробована. Ну, разве что сам себя он скомпилировал.

oo2c.exe - 2 Мб. Нормально. : )

Весь bat-файл (от копирования исходников до завершения последнего make install) у меня на ноутбуке выполняется за 9 минут и 5 секунд.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что с oo2c?
СообщениеДобавлено: Среда, 20 Июль, 2011 16:22 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2296
Откуда: Россия, Санкт-Петербург
Код:
bash-3.1$ oo2c
## Exception: IO.FileNotFound
## No such file or directory: /usr/local/lib/oo2c/oo2crc.xml

bash-3.1$ $PATH
bash: /mingw/bin:/usr/bin:/usr/local/bin:/usr/local/lib:/usr/local/include:/c/WINDOWS/system32:/c/WINDOWS:/c/WINDOWS/System32/Wbem:/d/Programs/Dev/TortoiseSVN/bin:/d/Programs/Dev/Misc/:/d/Programs/Dev/XDS/BIN/:/d/Programs/Dev/Make/:/d/Programs/Dev/GnuWin32/bin/:/d/Programs/Dev/Git/cmd/:/d/Programs/Dev/Svn/bin/:/d/Programs/Dev/GraphViz/bin/:/d/Programs/Dev/Delphi7/Bin/:/d/Programs/Dev/Delphi7/Projects/Bpl/:/d/Programs/Dev/Delphi7/System32/: No such file or directory

bash-3.1$ cat /usr/local/lib/oo2c/oo2crc.xml
<!-- -*-mode: xml-*- -->
<configuration>
  <options>
    <set name='cc'>gcc</set>
    <set name='cppflags'>-DGC_WIN32_THREADS</set>
    <set name='cflags'>-O2</set>
    <set name='ldflags'></set>
    <set name='libs'>-L/usr/local/lib</set>

    <set name='libtool'>no</set>
    <set name='libdir'>/usr/local/lib</set>

    <set name='install'>d:/Programs/Dev/MinGW/msys/1.0/bin/install.exe</set>
    <set name='installProgram'>d:/Programs/Dev/MinGW/msys/1.0/bin/install.exe</set>
    <set name='installData'>d:/Programs/Dev/MinGW/msys/1.0/bin/install.exe -m 644</set>
    <set name='uninstall'>rm -f</set>
    <set name='bindir'>/usr/local/bin</set>
    <set name='oocdir'>/usr/local/lib/oo2c</set>

    <set name='xsltproc'>no</set>
  </options>

  <pragmas>
    <set name='Warnings'>TRUE</set>
    <set name='Assertions'>TRUE</set>

    <set name='IndexCheck'>TRUE</set>
    <set name='DerefCheck'>TRUE</set>
    <set name='OverflowCheck'>FALSE</set>  <!-- not supported -->
    <set name='CaseSelectCheck'>TRUE</set>
    <set name='FunctResult'>TRUE</set>
    <set name='TypeGuard'>TRUE</set>
    <set name='ConformantMode'>FALSE</set>  <!-- not supported -->
  </pragmas>

  <repositories>
    <file-system>/usr/local/lib/oo2c</file-system>
    <file-system>.</file-system>
  </repositories>
</configuration>

bash-3.1$
Другими словами: файл /usr/local/lib/oo2c/oo2crc.xml существует, но oo2c не может его найти при запуске. Если же его в точно таком же виде указать с помощью параметра --config, то, вроде бы, работает:
Код:
bash-3.1$ oo2c --config /usr/local/lib/oo2c/oo2crc.xml
Usage:
  oo2c [options] <module>...
  oo2c (--make|-M) [options] <module>
  oo2c --uses <ext-ident> [options] <module> ...
  oo2c --build-package [options] <package>
  oo2c --install-package [options] <package>
  oo2c --uninstall-package [options] <package>
  oo2c --build-pkg-doc [options] <package>
  oo2c --package-installed [options] <package>
  oo2c --list-packages [options]
Options:
  --config <file>
  --repository <directory>, -r <directory>
  --no-rtc
  (--all|-A)
  --error-style (file:line:column|char-pos|attributes)

bash-3.1$


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что с oo2c?
СообщениеДобавлено: Среда, 20 Июль, 2011 16:29 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2296
Откуда: Россия, Санкт-Петербург
Пробую скомпилировать простенькую программу, пока не получается:
Код:
bash-3.1$ cat <&1 >./hello.mod
MODULE Hello;
IMPORT Out;
BEGIN
  Out.Open;
  Out.String('Hello, world!');
  Out.Ln;
END Hello.

[1]+  Stopped                 cat 0<&1 >./hello.mod

bash-3.1$ oo2c --make hello.mod
## Exception: IO.FileNotFound
## No such file or directory: /usr/local/lib/oo2c/oo2crc.xml

bash-3.1$ oo2c --config /usr/local/lib/oo2c/oo2crc.xml --make hello.mod
d:/Programs/Dev/MinGW/bin/hello.mod:1:1: Cannot locate module `RT0'
d:/Programs/Dev/MinGW/bin/hello.mod:2:8: Cannot locate module `Out'

bash-3.1$
Будем разбираться с настройками путей к стандартным модулям.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что с oo2c?
СообщениеДобавлено: Среда, 20 Июль, 2011 20:16 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2296
Откуда: Россия, Санкт-Петербург
Александр Ильин писал(а):
Будем разбираться с настройками путей к стандартным модулям.
По проторенной дорожке, меняю пути с /usr/local на d:/Programs/MinGW/... После замены в файле /usr/local/lib/oo2c/oo2crc.xml параметра
Код:
  <repositories>
    <file-system>/usr/local/lib/oo2c</file-system>
    <file-system>.</file-system>
  </repositories>
на
Код:
  <repositories>
    <file-system>d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c</file-system>
    <file-system>.</file-system>
  </repositories>
компиляция перешла в следующую стадию:
Код:
bash-3.1$ oo2c --config /usr/local/lib/oo2c/oo2crc.xml --make hello.mod
d:/Programs/Dev/MinGW/bin/hello.mod:1:8: Module name does not match access path `hello'
Ну, это уже понятно: в имени модуля первая буква заглавная, а в имени файла - нет. Переименовываем файл - получаем в точности ту же ошибку. Ладно, исправляем имя файла ещё и в командной строке вызова компилятора:
Код:
bash-3.1$ oo2c --config /usr/local/lib/oo2c/oo2crc.xml --make Hello.mod
d:/Programs/Dev/MinGW/bin/Hello.mod:4:7: Undeclared identifier
Ага. В модуле Out отсутствует процедура Open. Удаляем эту строку, сохраняемся и компилируем снова. На этот раз никаких сообщений. Успех!

Ищем, где находится созданный Hello.exe. Оказывается, он помещён в новенький подкаталог bin текущего пути, рядом с исходником. Заодно созданы небезынтересные каталоги sym и obj. Размер exe-файла впечатляет: 169 Кб. Немало для такой программы. Взгляд внутрь проясняет картину: объектно-ориентированный стиль стандартной библиотеки OOC заставил запихать внутрь целую кучу ненужной дребедени (каналы ввода-вывода потянули за собой механизмы сообщения об ошибках, а те, в свою очередь, самые разные процедуры преобразования чисел в строки, обработку исключений, сборщик мусора и т.д. и т.п.).

Ну что же, начало положено. Можно меня поздравить! : )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что с oo2c?
СообщениеДобавлено: Четверг, 21 Июль, 2011 15:09 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2296
Откуда: Россия, Санкт-Петербург
Alexey Veselovsky писал(а):
http://ooc.sourceforge.net/ -- пустая страница.
Правильная ссылка: http://ooc.sourceforge.net/index.html
Alexey Veselovsky писал(а):
про то что последний релиз датирован 2005 годом я промолчу
Вообще-то дата последнего архива - октябрь 2006.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что с oo2c?
СообщениеДобавлено: Суббота, 23 Июль, 2011 20:16 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2296
Откуда: Россия, Санкт-Петербург
Ещё раз попытался всё установить с нуля, и снова столкнулся со странностью. На этот раз при компиляции oo2c скрипт ./configure не находит корректно установленную библиотеку GC. Пути к local/include и local/lib присутствуют в PATH, но, видимо, этого не достаточно. В общем, мной был написан файл MyInstall.bat. Его надо поместить в каталог d:\Programs\Dev\MinGW\msys\1.0\local\src\oo2c.
Код:
@echo off
setlocal

rem This script compiles and installs oo2c, and verifies installation by compiling and running a simple "Hello, World!" program.
rem This script sets the paths to be used, which are specific to my machine setup. (c) Alexander Iljin, 2011.
set localPath=d:/Programs/Dev/MinGW/msys/1.0/local

set PATH=d:\Programs\Dev\MinGW\bin;d:\Programs\Dev\MinGW\msys\1.0\bin;%PATH%
bash -c "env INSTALL=d:/Programs/Dev/MinGW/msys/1.0/bin/install.exe LDFLAGS=-L%localPath%/lib CFLAGS=-O2 \"CPPFLAGS=-I%localPath%/include -DGC_WIN32_THREADS\" ./configure --disable-libs --prefix=%localPath%"
bash -c make && bash -c "make install" && bash -c "make clean"

rem Test by creating a Hello, World! program:
md ..\hello
cd ..\hello
echo MODULE Hello; IMPORT Out; BEGIN Out.String('Hello, World!'); Out.Ln; END Hello.>Hello.Mod
set PATH=d:\Programs\Dev\MinGW\msys\1.0\local\bin;%PATH%
bash -c "oo2c -Mv Hello.Mod"
bin\Hello.exe

endlocal
Здесь используется второй подход, при котором нужные пути (lib, include) не добавляются к PATH, а задаются на этапе выполнения ./configure. В PATH добавляются только пути к MinGW, msys и скомпилированным файлам oo2c.

По сравнению с прошлым bat-файлом, опубликованным ранее в этой теме, к вызову ./configure добавлен параметр --prefix. Благодаря этому запуск oo2c без параметра --configure не приводит к исключению вида
Код:
## Exception: IO.FileNotFound
## No such file or directory: /usr/local/lib/oo2c/oo2crc.xml
Теперь при компиляции oo2c автоматически создаваемый модуль OOC:Config:Autoconf.Mod содержит константу configFile* = "d:/Programs/Dev/MinGW/msys/1.0/local/lib/oo2c/oo2crc.xml", что решает проблему поиска конфигурации по умолчанию.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что с oo2c?
СообщениеДобавлено: Воскресенье, 24 Июль, 2011 07:29 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2296
Откуда: Россия, Санкт-Петербург
На данный момент мне уже понятно, как создавать кроссплатформенные приложения, опирающиеся на стандартный ввод-вывод. Не понятно, как создавать приложения для Windows: есть ли модули импорта стандартных функций WinApi?

Ещё не понятно, можно ли увидеть стек вызова на момент возникновения исключения/трапа (post-mortem history)? В документации oo2c я упоминания такой возможности не увидел. Да и исходя из общего устройства oo2c это, скорее всего, вопрос к GCC. Кто-нибудь знает, есть ли в GCC нечто подобное? Или для этого нужно использовать GDB? Если нужен GDB, то не мог ли бы кто-то подсказать, что нужно сделать (опции компиляции, что такое "debugging symbols", запуск под gdb и команда для выдачи стека при исключении)? Можно ссылку на хороший обучающий материал.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что с oo2c?
СообщениеДобавлено: Воскресенье, 24 Июль, 2011 15:05 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2296
Откуда: Россия, Санкт-Петербург
Попробовал скомпилировать один из простеньких своих проектов - ImportGraph. Обнаружил проблему: компилятор вылетает с трапом при разборе директивы в заголовке модуля. Директива XDS вида <*main+*>, обозначает главный модуль приложения. Понятно, что для oo2c она не нужна и не поддерживается, но зачем же трап-то? Решил попробовать отладить компилятор.

В принципе, получается. Правлю файл /usr/local/src/oo2c/src/OOC/Scanner/Pragma.Mod, затем делаю make && make install. Порасставлял ASSERT'ы, прикинул, как что устроено в том модуле, но всё ж таки не до конца понял. Хочу посмотреть стек вызовов на момент падения по ASSERT'У.

Нашёл простенькое введение в GDB. Скомпилировал oo2c с отладочной информацией: перед выполнением ./configure в командной строке env указал \"CFLAGS=-O2 -ggdb\" вместо CFLAGS=-O2. oo2c.exe стал почти в четыре раза больше - 8.1 Мб. Хорошо, значит отладочная информация добавилась.

Иду в каталог /usr/local/src/oo2c, запускаю "gdb bin/oo2c". Затем указываю параметры запуска: "set args ../ImportGraph/ImportGraph.Mod". Запускаю: run. Вижу следующее:
Код:
(gdb) run
Starting program: d:\Programs\Dev\MinGW\msys\1.0\local\src\oo2c/bin/oo2c.exe ../ImportGraph/ImportGraph.Mod
[New Thread 4012.0x23ec]

##
## Runtime error in module OOC:Scanner:Pragma at pos 9577
## Assertion failed, code 20
##

Program exited with code 0177.
(gdb)
Не могу понять, как заставить gdb остановиться при возникновении исключения, а не дожидаться завершения работы программы. Команды типа "catch catch" или "catch throw" ни к чему новому не приводят:
Код:
(gdb) catch catch
Function "__cxa_begin_catch" not defined.
Catchpoint 1 (catch)
(gdb) catch throw
Function "__cxa_throw" not defined.
Catchpoint 2 (throw)
(gdb) run
Starting program: d:\Programs\Dev\MinGW\msys\1.0\local\src\oo2c\bin/oo2c.exe ../../ImportGraph/ImportGraph.Mod
[New Thread 6020.0xb88]

##
## Runtime error in module OOC:Scanner:Pragma at pos 9577
## Assertion failed, code 20
##

Program exited with code 0177.
(gdb)
Заглянул в исходники, там в ключевой момент вызывается функция _assert. Однако, попытка поставить на неё прерывание тоже проваливается:
Код:
(gdb) break _assert
Function "_assert" not defined.
Make breakpoint pending on future shared library load? (y or [n]) n
(gdb)


UPD: О! Получилось вот так:
Код:
(gdb) break Pragma.c:391
Breakpoint 2 at 0x451f63: file obj/OOC/Scanner/Pragma.c, line 391.
(gdb) run
Starting program: d:\Programs\Dev\MinGW\msys\1.0\local\src\oo2c/bin/oo2c.exe ../ImportGraph/ImportGraph.mod
[New Thread 12008.0x2e54]

Breakpoint 2, OOC_Scanner_Pragma__AddSymbol (eval=1 '\001', value=Could not find the frame base for "OOC_Scanner_Pragma__AddSymbol".) at obj/OOC/Scanner/Pragma.c:1415
1415          i0 = OOC_Scanner_Pragma__ParsePragma((void*)(OOC_INT32)state, (RT0__Struct)((OOC_INT32)state__tag));

(gdb) bt
#0  OOC_Scanner_Pragma__AddSymbol (eval=1 '\001', value=Could not find the frame base for "OOC_Scanner_Pragma__AddSymbol".) at obj/OOC/Scanner/Pragma.c:1415
#1  0x004522f2 in OOC_Scanner_Pragma__ParsePragma_Expression_SimpleExpr_Term (eval=1 '\001', value=0x22fa88, value__tag=0x555620)
    at obj/OOC/Scanner/Pragma.c:510
#2  OOC_Scanner_Pragma__AddSymbol (eval=Could not find the frame base for "OOC_Scanner_Pragma__AddSymbol".) at obj/OOC/Scanner/Pragma.c:341
#3  0x00451b32 in OOC_Scanner_Pragma__ParsePragma_Expression_SimpleExpr (eval=1 '\001', value=0x22fa88, value__tag=0x555620) at obj/OOC/Scanner/Pragma.c:562
#4  OOC_Scanner_Pragma__AddSymbol (eval=Could not find the frame base for "OOC_Scanner_Pragma__AddSymbol".) at obj/OOC/Scanner/Pragma.c:336
#5  0x00451c2f in OOC_Scanner_Pragma__ParsePragma_Expression (eval=<value optimized out>, value=0x22fa88, value__tag=0x555620) at obj/OOC/Scanner/Pragma.c:615
#6  OOC_Scanner_Pragma__AddSymbol (eval=<value optimized out>, value=Could not find the frame base for "OOC_Scanner_Pragma__AddSymbol".) at obj/OOC/Scanner/Pragma.c:325
#7  0x00452494 in OOC_Scanner_Pragma__ParsePragma_Assignment (define=0 '\000', eval=1 '\001') at obj/OOC/Scanner/Pragma.c:936
#8  OOC_Scanner_Pragma__AddSymbol (define=0 '\000', eval=Could not find the frame base for "OOC_Scanner_Pragma__AddSymbol".) at obj/OOC/Scanner/Pragma.c:874
#9  0x00452efc in OOC_Scanner_Pragma__ParsePragma (state__tag=0x555520, inputMode=0x22fbef "\001\254v\"") at obj/OOC/Scanner/Pragma.c:1074
#10 OOC_Scanner_Pragma__AddSymbol (state__tag=0x555520, inputMode=0x22fbef "\001\254v\"") at obj/OOC/Scanner/Pragma.c:1415
#11 0x004546e3 in OOC_Scanner__ScanInput (builder=0x1147328, defaultPragmas=0x1143530, scanOptions=63) at obj/OOC/Scanner.c:1514
#12 0x004a6558 in OOC_Auxiliary_ParseModule__ParseModule (m=0x11871b8, checkModuleName=0 '\000', createNamespace=0 '\000', writeSymbolFile=0 '\000',
    abortAfterImport=1 '\001', libraryName=0x0, uses=0x11479e8, ast=0x22fce4, symTab=0x22fce8, pragmaHistory=0x22fcec, errList=0x22fce0)
    at obj/OOC/Auxiliary/ParseModule.c:35
#13 0x00533c19 in OOC_Make__RulesDesc_GetImports (r=0x11452a8) at obj/OOC/Make.c:553
#14 0x005340ef in OOC_Make__RulesDesc_UpdateHeaderFileC (r=0x11452a8, module=0x11871b8) at obj/OOC/Make.c:1200
#15 0x00535acf in OOC_Make__RulesDesc_Update (r=0x11452a8, module=0x11871b8, fileId=13 '\r') at obj/OOC/Make.c:2026
#16 0x005327fe in OOC_Make__RulesDesc_UpdateDeclFileC (r=0x11452a8, module=0x11871b8) at obj/OOC/Make.c:1249
#17 0x00535ae7 in OOC_Make__RulesDesc_Update (r=0x11452a8, module=0x11871b8, fileId=12 '\f') at obj/OOC/Make.c:2022
#18 0x00532eea in OOC_Make__RulesDesc_UpdateCodeFileC (r=0x11452a8, module=0x11871b8) at obj/OOC/Make.c:1266
#19 0x00535aff in OOC_Make__RulesDesc_Update (r=0x11452a8, module=0x11871b8, fileId=11 '\v') at obj/OOC/Make.c:2018
#20 0x005394c4 in OOC_oo2c_init () at obj/oo2c.c:1290
#21 0x005399d0 in OOC_oo2c_open (client=0x0) at obj/oo2c.d:125
#22 0x00539a12 in main (argc=2, argv=0x3e2530) at obj/oo2c_.c:5
(gdb)
Только вот я не понял. Остановка, кажется, произошла на Pragma.c:1415, а я-то просил на Pragma.c:391... Почему так? Строка совсем не та, что я имел в виду.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что с oo2c?
СообщениеДобавлено: Понедельник, 25 Июль, 2011 03:21 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2296
Откуда: Россия, Санкт-Петербург
Выяснил, что программы oo2c выдают стека вызовов при сбое, но только при задании директивы HAVE_BACKTRACE_SYMBOLS в __config.h (формируется автоматически при выполнении ./configure) и наличии execinfo.h. В общем, это всё есть, но не под Windows.

См. поиск по слову "backtrace" в RT0.c и Exception.c.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что с oo2c?
СообщениеДобавлено: Понедельник, 25 Июль, 2011 09:36 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2296
Откуда: Россия, Санкт-Петербург
Александр Ильин писал(а):
Только вот я не понял. Остановка, кажется, произошла на Pragma.c:1415, а я-то просил на Pragma.c:391... Почему так? Строка совсем не та, что я имел в виду.
Выполнив команду "step" несколько раз, я понял, что выполнение на самом деле остановилось там, где я хотел. Временные прыжки не на ту строку - это результат оптимизации и перемещения блоков кода (забыл убрать опцию -O2, когда добавлял -g).

Поскольку ошибка воспроизводимая, то мне удалось автоматизировать получение стека вызовов с помощью GDB, достаточно выполнить следующую последовательность команд:
Код:
break exit
run
backtrace
continue
quit
А если эту последовательность записать в файл с именем, например, "bt.gdb" (от англ. backtrace и GDB), то становится достаточно следующей командной строки:
Код:
bash-3.1$ gdb --quiet -x bt.gdb --args bin/oo2c ../ImportGraph/ImportGraph.Mod
Reading symbols from d:\Programs\Dev\MinGW\msys\1.0\local\src\oo2c/bin/oo2c.exe...done.
Breakpoint 1 at 0x545268
[New Thread 10176.0x1f58]

##
## Runtime error in module OOC:Scanner:Pragma at pos 9577
## Assertion failed, code 20
##

Breakpoint 1, 0x00545268 in exit ()
#0  0x00545268 in exit ()
#1  0x00401721 in _runtime_error (msg=0x22f870 "Assertion failed, code 20", mid=0x555644, pos=9577) at d:/Programs/Dev/MinGW/msys/1.0/local/src/oo2c/lib/src/RT0.c:64
#2  0x00401c05 in RT0__ErrorAssertionFailed (mid=0x555644, pos=9577, code=20) at d:/Programs/Dev/MinGW/msys/1.0/local/src/oo2c/lib/src/RT0.c:321
#3  0x0045223e in OOC_Scanner_Pragma__ParsePragma_Expression_SimpleExpr_Term_Factor (eval=<value optimized out>, value=0x22fa88, value__tag=0x555620) at obj/OOC/Scanner/Pragma.c:391
#4  OOC_Scanner_Pragma__AddSymbol (eval=<value optimized out>, value=Could not find the frame base for "OOC_Scanner_Pragma__AddSymbol".) at obj/OOC/Scanner/Pragma.c:346
#5  0x004522f2 in OOC_Scanner_Pragma__ParsePragma_Expression_SimpleExpr_Term (eval=1 '\001', value=0x22fa88, value__tag=0x555620) at obj/OOC/Scanner/Pragma.c:510
#6  OOC_Scanner_Pragma__AddSymbol (eval=Could not find the frame base for "OOC_Scanner_Pragma__AddSymbol".) at obj/OOC/Scanner/Pragma.c:341
#7  0x00451b32 in OOC_Scanner_Pragma__ParsePragma_Expression_SimpleExpr (eval=1 '\001', value=0x22fa88, value__tag=0x555620) at obj/OOC/Scanner/Pragma.c:562
#8  OOC_Scanner_Pragma__AddSymbol (eval=Could not find the frame base for "OOC_Scanner_Pragma__AddSymbol".) at obj/OOC/Scanner/Pragma.c:336
#9  0x00451c2f in OOC_Scanner_Pragma__ParsePragma_Expression (eval=<value optimized out>, value=0x22fa88, value__tag=0x555620) at obj/OOC/Scanner/Pragma.c:615
#10 OOC_Scanner_Pragma__AddSymbol (eval=<value optimized out>, value=Could not find the frame base for "OOC_Scanner_Pragma__AddSymbol".) at obj/OOC/Scanner/Pragma.c:325
#11 0x00452494 in OOC_Scanner_Pragma__ParsePragma_Assignment (define=0 '\000', eval=1 '\001') at obj/OOC/Scanner/Pragma.c:936
#12 OOC_Scanner_Pragma__AddSymbol (define=0 '\000', eval=Could not find the frame base for "OOC_Scanner_Pragma__AddSymbol".) at obj/OOC/Scanner/Pragma.c:874
#13 0x00452efc in OOC_Scanner_Pragma__ParsePragma (state__tag=0x555520, inputMode=0x22fbef "\001м√\"") at obj/OOC/Scanner/Pragma.c:1074
#14 OOC_Scanner_Pragma__AddSymbol (state__tag=0x555520, inputMode=0x22fbef "\001м√\"") at obj/OOC/Scanner/Pragma.c:1415
#15 0x004546e3 in OOC_Scanner__ScanInput (builder=0x1147528, defaultPragmas=0x1143560, scanOptions=63) at obj/OOC/Scanner.c:1514
#16 0x004a6558 in OOC_Auxiliary_ParseModule__ParseModule (m=0x1187698, checkModuleName=0 '\000', createNamespace=0 '\000', writeSymbolFile=0 '\000', abortAfterImport=1 '\001', libraryName=0x0, uses=0x11479e8, ast=0x22fce4, symTab=0x22fce8, pragmaHistory=0x22fcec, errList=0x22fce0) at obj/OOC/Auxiliary/ParseModule.c:35
#17 0x00533c19 in OOC_Make__RulesDesc_GetImports (r=0x11452a8) at obj/OOC/Make.c:553
#18 0x005340ef in OOC_Make__RulesDesc_UpdateHeaderFileC (r=0x11452a8, module=0x1187698) at obj/OOC/Make.c:1200
#19 0x00535acf in OOC_Make__RulesDesc_Update (r=0x11452a8, module=0x1187698, fileId=13 '\r') at obj/OOC/Make.c:2026
#20 0x005327fe in OOC_Make__RulesDesc_UpdateDeclFileC (r=0x11452a8, module=0x1187698) at obj/OOC/Make.c:1249
#21 0x00535ae7 in OOC_Make__RulesDesc_Update (r=0x11452a8, module=0x1187698, fileId=12 '\f') at obj/OOC/Make.c:2022
#22 0x00532eea in OOC_Make__RulesDesc_UpdateCodeFileC (r=0x11452a8, module=0x1187698) at obj/OOC/Make.c:1266
#23 0x00535aff in OOC_Make__RulesDesc_Update (r=0x11452a8, module=0x1187698, fileId=11 '\v') at obj/OOC/Make.c:2018
#24 0x005394c4 in OOC_oo2c_init () at obj/oo2c.c:1290
#25 0x005399d0 in OOC_oo2c_open (client=0x0) at obj/oo2c.d:125
#26 0x00539a12 in main (argc=2, argv=0x3e24f0) at obj/oo2c_.c:5

Program exited with code 0177.
bash-3.1$
Другими словами, для получения стека вызовов достаточно запустить программу под отладчиком с правильными параметрами, и дождаться поломки. Чтобы не писать всю командную строку, можно создать файл bt.bat следующего содержания:
Код:
gdb --quiet -x bt.gdb --args %*
Запускать, соответственно, так (из cmd.exe): bt bin/oo2c ../ImportGraph/ImportGraph.Mod

Для Bash этот командный файл будет выглядеть немного иначе:
Код:
#!/bin/bash
gdb --quiet -x bt.gdb --args $*
Запуск тоже чуточку отличается: ./bt bin/oo2c ../ImportGraph/ImportGraph.Mod

Текущим каталогом должен быть путь к local/src/oo2c, поскольку GDB по умолчанию ищет сишные исходники относительно текущего пути, в подкаталоге obj (такие пути прописаны внутри exe-файла). При желании можно воспользоваться параметром --directory, указав путь к исходникам так: gdb --directory=d:/Programs/Dev/MinGW/msys/1.0/local/src/oo2c


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что с oo2c?
СообщениеДобавлено: Понедельник, 25 Июль, 2011 10:02 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2296
Откуда: Россия, Санкт-Петербург
Чтобы полностью превратить oo2c в отлаживаемый проект, нужно не только добавить параметр -ggdb (включение отладочной информации), но и удалить -O2 (оптимизация). Для этого нужно сделать следующее:
- выполнить make clean, чтобы удалить ранее скомпилированные модули;
- в файле Makefile.config отредактировать переменную "CFLAGS", заменить "export CFLAGS=-O2" на "export CFLAGS=-ggdb";
- в файле oo2crc-install.xml заменить строку "<set name='cflags'>-O2</set>" на "<set name='cflags'>-ggdb</set>";
- выполнить make && make install.

По сравнению с оптимизированной отладочной версией oo2c (8.1 Мб) полученная неоптимизированная отладочная версия будет не намного больше - 8.2 Мб. Зато выдача стека вызовов станет гораздо чище и ближе к исходному тексту:
Код:
bash-3.1$ ./bt bin/oo2c ../ImportGraph/ImportGraph.Mod
Reading symbols from d:\Programs\Dev\MinGW\msys\1.0\local\src\oo2c/bin/oo2c.exe...done.
Breakpoint 1 at 0x69d928
[New Thread 8540.0x1544]

##
## Runtime error in module OOC:Scanner:Pragma at pos 9577
## Assertion failed, code 20
##

Breakpoint 1, 0x0069d928 in exit ()
#0  0x0069d928 in exit ()
#1  0x004016a0 in _runtime_error (msg=0x22f800 "Assertion failed, code 20", mid=0x6ac980, pos=9577) at d:/Programs/Dev/MinGW/msys/1.0/local/src/oo2c/lib/src/RT0.c:64
#2  0x00401deb in RT0__ErrorAssertionFailed (mid=0x6ac980, pos=9577, code=20) at d:/Programs/Dev/MinGW/msys/1.0/local/src/oo2c/lib/src/RT0.c:321
#3  0x0049971e in OOC_Scanner_Pragma__ParsePragma_Expression_SimpleExpr_Term_Factor (eval=1 '\001', value=0x22fa1c, value__tag=0x6acb20) at obj/OOC/Scanner/Pragma.c:391
#4  0x00499dd6 in OOC_Scanner_Pragma__ParsePragma_Expression_SimpleExpr_Term (eval=1 '\001', value=0x22fa1c, value__tag=0x6acb20) at obj/OOC/Scanner/Pragma.c:510
#5  0x00499fb1 in OOC_Scanner_Pragma__ParsePragma_Expression_SimpleExpr (eval=1 '\001', value=0x22fa1c, value__tag=0x6acb20) at obj/OOC/Scanner/Pragma.c:562
#6  0x0049a186 in OOC_Scanner_Pragma__ParsePragma_Expression (eval=1 '\001', value=0x22fa1c, value__tag=0x6acb20) at obj/OOC/Scanner/Pragma.c:615
#7  0x0049ad1a in OOC_Scanner_Pragma__ParsePragma_Assignment (define=0 '\000', eval=1 '\001') at obj/OOC/Scanner/Pragma.c:936
#8  0x0049851e in OOC_Scanner_Pragma__ParsePragma (state__tag=0x6aca20) at obj/OOC/Scanner/Pragma.c:1074
#9  0x0049b692 in OOC_Scanner_Pragma__AddSymbol (state__tag=0x6aca20, inputMode=0x22fbbf "\001a") at obj/OOC/Scanner/Pragma.c:1415
#10 0x0049fa51 in OOC_Scanner__ScanInput (builder=0x1157348, defaultPragmas=0x1153530, scanOptions=63) at obj/OOC/Scanner.c:1514
#11 0x0055313a in OOC_Auxiliary_ParseModule__ParseModule (m=0x11971b8, checkModuleName=0 '\000', createNamespace=0 '\000', writeSymbolFile=0 '\000', abortAfterImport=1 '\001', libraryName=0x0, uses=0x1157a08, ast=0x22fce0, symTab=0x22fce4, pragmaHistory=0x22fce8, errList=0x22fcdc) at obj/OOC/Auxiliary/ParseModule.c:35
#12 0x006854e6 in OOC_Make__RulesDesc_GetImports (r=0x11552a8) at obj/OOC/Make.c:553
#13 0x0068795c in OOC_Make__RulesDesc_UpdateHeaderFileC (r=0x11552a8, module=0x11971b8) at obj/OOC/Make.c:1200
#14 0x0068a37b in OOC_Make__RulesDesc_Update (r=0x11552a8, module=0x11971b8, fileId=13 '\r') at obj/OOC/Make.c:2026
#15 0x00687bd3 in OOC_Make__RulesDesc_UpdateDeclFileC (r=0x11552a8, module=0x11971b8) at obj/OOC/Make.c:1249
#16 0x0068a360 in OOC_Make__RulesDesc_Update (r=0x11552a8, module=0x11971b8, fileId=12 '\f') at obj/OOC/Make.c:2022
#17 0x00687c56 in OOC_Make__RulesDesc_UpdateCodeFileC (r=0x11552a8, module=0x11971b8) at obj/OOC/Make.c:1266
#18 0x0068a345 in OOC_Make__RulesDesc_Update (r=0x11552a8, module=0x11971b8, fileId=11 '\v') at obj/OOC/Make.c:2018
#19 0x006918c7 in OOC_oo2c_init () at obj/oo2c.c:1290
#20 0x0068ad90 in OOC_oo2c_open (client=0x0) at obj/oo2c.d:125
#21 0x006920ba in main (argc=2, argv=0x3e25c8) at obj/oo2c_.c:5

Program exited with code 0177.
bash-3.1$


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что с oo2c?
СообщениеДобавлено: Понедельник, 25 Июль, 2011 18:16 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2296
Откуда: Россия, Санкт-Петербург
Импортировал в Git все 32-битные выпуски oo2c линейки 2.x, выложенные на SourceForge. Назвал ветку "original". Свои доработки буду вести в ветке "master". Закинул это всё на GitHub: https://github.com/AlexIljin/oo2c

Исправил ошибку в OOC:Scanner:Pragma, точнее даже две. См. ветку master: https://github.com/AlexIljin/oo2c/commits/master


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

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


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

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


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

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB