RDM/2 The Russian Electronic Developer Magazine  
RDM/2 Русский электронный журнал разработчика  
ДомойОт редактораПишите намОбратная связьRU/2

Руководство пользователя по EMX runtime

Замечания к статье

Данная статья является переводом оригинальной документации по emx runtime версии 09d fix 3. Переводчик не претендует на точность перевода, так как выполнялся он для собственных нужд, как для лучшего понимания работы emx, так и для тренировки в переводах. Переводчик будет рад вашим замечаниям и исправлениям. Домашняя страница статьи http://emx.nm.ru.

Содержание

  1. Введение в руководство пользователя по emx Runtime
  2. Лицензионное соглашение
  3. Установка пакета emx runtime под OS/2
  4. Установка пакета emx runtime под DOS
  5. Переменные окружения (OS/2 и DOS)
  6. Замечания для DOS
  7. Опции emx
  8. Утилита emxstack
  9. Утилита emxupd
  10. Решение проблем
  11. Сообщения emx
  12. Полный комплект пакета emx
  13. Автор emx

Введение в руководство пользователя по emx Runtime

Это документация по пакету emx runtime. emx runtime - это среда для 32-битных программ под OS/2 2.x, OS/2 3.x (OS/2, для краткости), MS-DOS, и PC-DOS (DOS, для краткости) на машинах с процессором 386 (или более поздней модификацией).

Под OS/2, вы можете просмотреть .inf версию этого документы, введя

    view \emx\book\emxrt
Если вы добавите \emx\book к переменной окружения BOOKSHELF, то вы можете ввести
    view emxrt
для просмотра этой электронной книги.

Аппаратные требования

emx требует процессор 80386 (80386DX, 80386SX, i486, или более поздний)

Файлы, включенные в поставку пакеты emx runtime

Пакет emx runtime включает следующие файлы:

  \emx\bin\emx.exe              emx runtime для DOS
  \emx\bin\emxbind.exe          Утилита для модификации emx программ (DOS и OS/2)
  \emx\bin\emxfpemu             Эмулятор математического сопроцессора (DOS)
  \emx\bin\emxl.exe             загрузчик emx (используется emxbind)
  \emx\bin\emxload.exe          Сервер для оставления программ OS/2 в памяти
  \emx\bin\emxrev.cmd           Утилита для отображения редакций emx (OS/2)
  \emx\bin\emxstack.exe         Утилита для исправления размера стэка в старых программых
  \emx\bin\emxupd.exe           Утилита для обновления DLL которые заняты другими программами
  \emx\bin\emxuzdll.cmd         Распаковка DLL и установка их с помощью emxupd.exe
  \emx\book\emxrt.inf           .inf версия emxrt.doc
  \emx\dll\emx.dll              emx runtime для OS/2
  \emx\dll\emxio.dll            Операции ввода/вывода с аппаратными портами под OS/2
  \emx\dll\emxlibc.dll          Форвардер на emxlibcm.dll (OS/2)
  \emx\dll\emxlibcm.dll         Многопоточная (Multithread) библиотека C (OS/2)
  \emx\dll\emxlibcs.dll         Однопоточная (Single-thread) библиотека C (OS/2)
  \emx\dll\emxwrap.dll          Интерфейс к 16-битным функциям OS/2 (OS/2)
  \emx\doc\COPYING              Лицензия GNU General Public License
  \emx\doc\COPYING.EMX          Лицензия на emx и библиотеки, обзор лицензий
  \emx\doc\emxrt.doc            Руководство пользователя по пакету emx runtime
  \emx\etc\termcap.dat          База данных терминалов для termcap-based программ
  \emx\etc\emclibcm.map         Map-файл для emxlibcm.dll
  \emx\etc\emclibcm.tdf         Trace definition file for emxlibm.dll
  \emx\etc\emclibcs.map         Map-файл для emxlibcs.dll
  \emx\etc\emclibcs.tdf         Trace definition file для emxlibs.dll
  \emx\etc\trc00f8.tff          Trace format file для emxlibcs.dll
  \emx\etc\trc00f9.tff          Trace format file для emxlibcm.dll
Файлы .map, .tdf, и .tff используются для отладки. Они включены в emxrt.zip для синхонизации их с DLL.

Лицензионное соглашение

emx is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version.

emx is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with emx; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

См. \emx\doc\COPYING.EMX и \emx\doc\COPYING для подробной информации.

Заметьте, что исходный код для части содержимого emxrt.zip содержиться в emxfix03.zip.

См. также
\emx\doc\COPYING.rus для лучшего понимания \emx\doc\COPYING
\emx\doc\COPYING.EMX.rus для лучшего понимания \emx\doc\COPYING.EMX

Установка пакета emx runtime под OS/2

Краткая инструкция для пользователей OS/2

  1. Если вы используете ScreenSaver Siegfried'а Hanisch'а, то обновите его до версии 2.6 или отключите ScreenSaver
  2. Добавте \emx\dll к LIBPATH (ипользуйте последние версии .dll файлов!)
  3. Добавте \emx\bin к PATH
  4. Перезагрузитесь

Подробные инструкции для пользователей OS/2

emx не работает с OS/2 1.x и в DOS режиме OS/2.

Перед изменением config.sys, сделайте резервную копию этого файла!

Использование emx 0.9c и новее приводит к зависанию некоторых версий программы ScreenSaver Siegfried Hanisch'а. Необходимо обновить версию до 2.6 или отключить ScreenSaver до установки emx 0.9c или новее. Иначе вы получите зависание системы.

emx runtime реализован как набор динамических библиотек OS/2:

OS/2 ищет динамические библиотеки в каталогах, указанных в LIBPATH в вашем config.sys файле. Примечание: LIBPATH не переменная окружения!

Если в LIBPATH указаны каталоги с различными версиями динамических библиотек, то загружается первая встретившаяся. Если вы уже устанавливали динамические библиотеки emx, убедитесь, что вы используете последнии версии библиотек. Новые версии библиотек работают со старыми программами emx (однако, вам может потребоваться использовать emxstack), однако новые программы emx не работают со старыми динамическими библиотеками emx. Для того, чтобы узнать о том, какие библиотеки emx уже установлены введите

    cd \emx\bin
    emxrev

Если нет установленных динамических библиотек emx, то информация не выводиться. Если динамические библиотеки emx установлены, то выводяться имена и редакции DLL. Например:

    EMX : редакция = 30
    EMXIO : редакция = 30
    EMXLIBC : редакция = 30
    EMXLIBCM : редакция = 30
    EMXLIBCS : редакция = 30
    EMXWRAP : редакция = 30

Поиск происходит только в каталогах указанных в LIBPATH. Для вывода редакции динамических библиотек этого пакета, введите

    
    emxrev -d c:\emx\dll
если пакет emx runtime находиться на диске C. После запуска emxrev, вы можите выйти из командного процессора введя
    exit
для выгрузки библиотек с динамической линковкой (они загружаются с помощью cmd.exe т.к. emxrev является процедурой REXX). Иначе вы не сможете переписать, переименовать или удалить эти файлы. Это также происходит, если одна из библиотек с динамической линковкой используется какой-либо программой. Если пы получите сообщеное об ошибке SYS0032 или сообщение
    error:  cannot create emx/dll/emx.dll
    (ошибка: не могу создать emx/dll/emx.dll)
от unzip когда распаковываете emxrt.zip, то используйте
    pstat /L
чтобы найти программы, которые используют одну или несколько библиотек emx. Остановите все программы, которые используют emx.dll, emxio.dll, emxlibc.dll, emxlibcm.dll, emxlibcs.dll или emxwrap.dll. Команда
    emxload -qw
выгрузит программы, которые оставлены в памяти с помощью emxload.exe.

Если это не поможет, то используйте emxuzdll для установки emx DLL: Создайте временный каталог и запустите emxuzdll.cmd в нем, указав путь к emxfix03.zip или emxrt.zip и путь к каталогу emx DLL в командной строке:

        mkdir \emxtmp
        chdir \emxtmp
        emxuzdll a:\emxfix03.zip c:\emx\dll
        chdir ..
        rmdir emxtmp
Это заменит DLL в c:\emx\dll на DLL из emxfix03.zip, даже если эти DLL используются программами. Новые версии DLL станут активными как только последний процесс, использующий их, завершиться или при первой перезагрузке системы. Теоретически, вы можете перезагрузиться после запуска emxuzdll, в противном случае, вы не сможете активны ли или нет новые версии DLL. (На самом деле, вам не нужен временный каталог. Любой каталог без DLL подойдет для данного скрипта)

Разместите копии новейших редакций динамических библиотек emx (те из них, которые имеют максимальный номер редакции) в каталоге, указанном директивой LIBPATH в файле config.sys или, лучше всего, измените директиву LIBPATH так, чтобы она включала каталог, где расположены новейшие редакции динамических библиотек emx.

Каталоги в операторе LIBPATH разделены точкой с запятой. Для добавления c:\emx\dll к LIBPATH, добавьте точку с запятой -- если ее еще нет -- в конец строки config.sys которая начинается с

    LIBPATH=
Затем, добавьте путь в конец строки. Например:
    LIBPATH=.;C:\OS2\DLL;C:\OS2\MDOS;C:\;C:\OS2\APPS\DLL;D:\EMX\DLL
Опционально, вы можете добавить точку с запятой в конец строки.

Далее, измените строку в файле config.sys начинающейся с

    SET PATH=
для добавления каталога \emx\bin directory. Например, измените
    SET PATH=C:\OS2;C:\OS2\SYSTEM;C:\OS2\MDOS\WINOS2;C:\OS2\INSTALL;
    C:\;C:\OS2\MDOS;C:\OS2\APPS
на
    SET PATH=C:\OS2;C:\OS2\SYSTEM;C:\OS2\MDOS\WINOS2;C:\OS2\INSTALL;
    C:\;C:\OS2\MDOS;C:\OS2\APPS;D:\EMX\BIN

Как и для LIBPATH, вы должны разделять пути точкой с запятой, завершающая точка с запятой опциональная. Заметьте, что последние два примера показаны в двух строчках. В файле config.sys оператор SET должен быть расположен одной строкой.

Вы можете захотеть добавить \emx\book в переменную окружения BOOKSHELF для упрощения просмотра on-line документации. Например, замените строку

    SET BOOKSHELF=C:\OS2\BOOK;
вашего файла config.sys на
    SET BOOKSHELF=C:\OS2\BOOK;C:\EMX\BOOK
как и для PATH, вы должны разделить пути точкой с запятой. Завершающая точка с запятой не обязательно.

Теперь вы можете перезагрузиться для активизации изменений config.sys. После загрузки запустите

    emxrev
для проверки какая последяя редакция emx активна в данный момент.

Если OS/2 пишет

    SYS1804: The system cannot find the file EMX.
    (SYS1804: Система не может найти файл EMX.)
когда вы запускаете программу emx, значит вы неправильно уствновили LIBPATH в config.sys. См. ниже для подробностей.

При запуске старой программы (которая подразумевает, что emx.dll создает объект стека, если размер стека слишком мал), вы можете получить сообщение об ошибке типа

    emx.dll: Stack size too small. Run
      emxstack -f D:\BIN\PROGRAM.EXE
    and try again.
   (emx.dll: Размер стека слишком мал. Запустите
      emxstack -f D:\BIN\PROGRAM.EXE
    и попробуйте снова.)

Запустите emxstack как указано в сообщение об ошибке для исправления размера стека программы. Если вы не можете (например, вы не имеете права записи для файла), введите

    set emxopt=-I
для того, чтобы emx.dll игнорировал проблемму. Однако, программа может "зависнуть" из-за нехватки размера стека. Использование опции -I не рекомендуется!

Установка пакета emx runtime под DOS

Краткая инструкция для пользователей DOS

  1. Добавте \emx\bin к PATH или установите переменную EMX равной \emx\bin\emx.exe
  2. Если вы используете менеджер памяти с реализацией DPMI, включите VCPI
  3. Удалите BREAK=ON из config.sys
  4. Перезагрузитесь

Подробные инструкции для пользователей DOS

Программы emx для DOS поставляются в двух видах: одни загружают emx.exe как отдельный файл, другие имеют emx.exe встроенный в исполняемый файл программы.

Перед модификацией autoexec.bat и config.sys сделайте резервную копию этих файлов!

Если вы хотите использовать программу, которая загружает emx.exe, то скопируйте emx.exe в каталог, который прописан в переменной окружения PATH или добавьте каталог с emx.exe к переменной окружения PATH (в файле autoexec.bat). Например, если файл autoexec.bat содержит строку

    path c:\dos;d:\bin
и вы установили emx на диск D, то вы можете изменить эту строчку, например, так
    path c:\dos;d:\bin;d:\emx\bin

Не забудьте разделять каталоги точкой с запятой.

В качестве альтернативы, вы можете установить переменную окружения, которая будет указывать полный путь к emx, что позволяет программе найти emx.exe более быстро. Например:

    set emx=d:\emx\bin\emx.exe

Заметим, что указывается не имя каталога, а полный путь к файлу emx.exe.

Программы второго вида, с интегрированным emx.exe, не требуют добавления каталога \emx\bin к переменной окружения PATH или установки переменной окружения EMX. Однако сама программа может требовать изменения файла autoexec.bat. Сверьтесь с документацией к программе по этому поводу. Следующие далее инструкии справедливы для обоих видов программ emx.

Если вы используете менеджер памяти (такой как QEMM, EMM386 или 386max) который реализует поддержку DPMI (DOS Protected Mode Interface), то измените настройки для включения поддержки VCPI, т.к. emx не поддерживает DPMI. Сверьтесь с документацией к менеджеру памяти по этому поводу. Если ваш менеджер памяти поддерживает только DPMI (без VCPI), то удалите или отключите менеджер. В качестве альтернативы вы можете использовать rsx как описано в разделе 6.3. emx поддерживает XMS и VCPI.

Проверьте ваш файл config.sys: если есть строка вида

    BREAK=ON
то вы можете удалить ее, т.к. это может привести к некоторым проблеммам с emx и некоторыми другими программами.

В случае использования платы расширения `Intel Inboard 386/PC' в компьютере на базе 8088, добавьте следующую строку в файл autoexec.bat (это плохо, что вы используете такую плату расширения):

    set emxopt=-m3

Если файл подкачки (используется для сохранения и восстановления страниц памяти на диске, когда не хватат физической памятт) должен находиться в определенном каталоге или на определенном диске, то установите переменную окружения EMXTMP. Например:

    set emxtmp=c:\tmp

Теперь вы можете перезагрузиться для того, чтобы изменения в config.sys и autoexec.bat вступили в силу.

Переменные окружения (OS/2 и DOS)

Функционирование emx и программ emx управляется некоторыми переменными окружения. Вы можете установить одну или несколько из следующих переменных окружения:

Установка переменной окружения TZ

Переменная окружения TZ управляет подсчетом Coordinated Universal Time (UTC aka GMT) из локального времени. (Заметим, что в Unix TZ используется для подсчета локального времени из UTC, т.к. UTC используется для системных часов. В OS/2 и DOS для системных часов используется локальное время.)

Значение TZ имеет следующий формат:

    <TZ1>[<OFF>,[<TZ2>[,<SM>,<SW>,<SD>,<ST>,<EM>,<EW>,<ED>,<ET>,<SHIFT>]]]

<TZ1> - трехбуквенное имя стандартной временной зоны.

<OFF> - смещение относительно Coordinated Universal Time; положительное значение на запад от нулевого мередиана, отрицательное значение на восток от нулевого мередиана. Смещение может быть указано в часах, часах и минутах или часах, минутах и секундах. Часы, минуты и секунды разделяются двоеточием. Если <OFF> не указано, то смещение принимается равным 0 (это может быть изменено в будущем).

<TZ2> - трехбуквенное имя летней временной зоны (daylight saving time). Если <TZ2> не указано, то перевод времени не осуществляется. Если <TZ2> указано, то время переводиться; Остальные составляющие переменной TZ указывают когда и как переходить с летнего на зимнее время и обратно. С <SM> по <ST> определяется, в текущем локальном времени, когда переводить часы с зимнего на летнее время, с <EM> по <ET> определяется, в текущем локальном времени, когда переводить часы с летнего на зимнее время. (В южном полушарии конечная дата предшествует начальной дате.) <SHIFT> определяет на сколько переводить в секундах.

<SM> определяет месяц изменения (с 1 по 12). <SW> определяет неделю изменения; если это значение нулевое, то <SD> определяет день месяуа (с 1 по 31). Если <SW> положительное (с 1 по 4), то изменение производиться в день <SD> <SW>-ой недели (0=Воскресенье, 1=Понедельник и т.д.) указанного месяца. Первая неделя месяца начинается в первое воскресенье месяца. Если <SW> отрицательное (с -1 по -4), то изменение производиться в день <SD> -<SW>-ой недели (0=Воскресенье, 1=Понедельник и т.д.) указанного месяца с его конца (т.е. -1 - это последняя неделя месяцв). Последняя неделя месяца начинается с последнего воскресенья месяца. <ST> содержит время изменения в секундах. Заметим, что <ST> содержит зимнее время, а <ET> - летнее.

Пример:

    CET-1CED,3,-1,0,7200,10,-1,0,10800,3600
В данном примере именем стандартной зоны является CET, именем летней временной зоны является CED. Перевод на летнее время осуществляется в 2:00 последнего воскресения марта, а перевод на зимнее -- в 3:00 последнего воскресения октября. Перевод осуществляется на один час.

Если за <TZ2> не следуют символы, то используется правило `,4,1,0,3600,10,-1,0,7200,3600': Переход на летнее время осуществляется в 1:00 первого воскресения апреля, а на зимнее -- в 2:00 последнего воскресения октября. Перевод осуществляется на один час.

Переменные окружения (DOS)

Замечания для DOS

Общие замечания

Аварийный выход

Если компьютер зависает во время работы emx, попробуйте нажать Ctrl-Break пять раз в секунду. Это прервет работу emx (и всех программ emx запущенных под этой копией emx), если зависание произошло не во время вызова функции DOS. Если зависание произошло в функции DOS, emx выгрузиться после возвращения из этой функции DOS.

Использование rsx вместо emx

rsx - это DPMI-совместимый расширитель DOS который более или менее совместим с emx. Кроме того, rsx содержит эиулятор математического сопроцессора. rsx - бесплатная программа, написанная Rainer'ом Schnittker'ом. rsx ожет быть найден на следующий анонимных ftp серверах:

 ftp.uni-bielefeld.de: /pub/systems/msdos/misc/rsx510.zip
 ftp.leo.org:          /pub/comp/os/os2/leo/gnu/emx+gcc/contrib/rsx510.zip

Если загрузчик emx, emxl.exe, находит сервер DPMI, но не находит сервер VCPI, то он пытается запустить rsx.exe вместо emx.exe. В этом случае используется переменная окружения RSX для поиска rsx.exe вместо переменной окружения EMX.

Для загрузки rsx.exe вместо emx.exe, когда обнаружен сервер DPMI и скрвер VCPI (например, если вы хотите использовать математический сопроцессор rsx), установите переменную окружения EMX, чтобы указывала на rsx.exe. Заметим, что для rsx необходим сервер DPMI.

Опции emx

Вы можете настроить emx установкой переменной окружения EMXOPT. Эта переменная окружения содержит список опций, наподобие опций в командной строки. Опции должны быть разделены как минимум одним пробелом. Например:

    set emxopt=-c -h40

Опции emx (OS/2)

-c Отключение дампа памяти вызванного сигналами и исключениями
-h# Установить предел file handle OS/2 равным #. Число # должно быть в пределах 10-65536
-n Запретить высплывающие окна (имеются ввиду сообщения об ошибке OS/2) для исключений. Т.к. emx.dll показывает подходящее сообщение об ошибке и сохраняет образ памяти, всплывающие окна не требуются.
-q Все аргументы командной строки, передаваемые дочернему процессу, будут повторены без разбора. Т.е. расширения масок и файлы ответа не будут работать в процессах, для которых указаа опция -q.
-r* Добавлять имя диска * к абсолютным именам файла. Если имя файла начинается с /, но не с //, /dev/ или /pipe/, будут добавлены * плюс двоеточие. Если указан ключ, то имя файла \mydir\abc будет преобразовано к d:\mydir\abc. Заметим, что данная опция может привести к неожиданным результатам.
-t*

Усекать имена файлов до формата 8.3. Каждая часть пути усекается до формата 8.3, остаются первые 8 символов до точки и первые три символа после точки. Это полезно при компиляции программ на файловой системе FAT с минимальными изменениями.

Без агрумента, -t включает усечение для всех дисков и для имен UNC.

Опция -t может иметь опциональные аргументы, которые указывают имена дисков, файлы на которых должны урезаться. Специальное имя '/' контролирует усечение имени файла в UNC путях. Например: опция `-tc/' указывает, что усечение будет производиться для диска C и UNC путей.

Если аргумент опции -t - символ `-', усечение отключается для всех дисков и UNC путей. Это установка по умолчанию. Если аргумент начинается с символа `-', то усечение отключается для всех дисков, указанных далее. Например, при опциях `-t -t-d' UNC пути и все файлы на всех дисках, за исключением диска D, будут усекаться.

-x Не запрещать маски и файлы ответа, если используется метод `MKS Korn shell' передачи аргументов командной строки.
-E Run debuggee in same session (window) as debugger
-I Не сообщять о программах, имеющих малый размер стека. Без этой опции emx.dll выводит сообщение об ошибке для этой программы, сообщающее как запустить emxstack для исправления размера стека. С опцией -I программа зпускается не смотря на проблему. Однако, программа может "упасть" из-за нехватки стека. Использование опции -I не рекомендуется!
-K Не использовать DosKillThread. Из-за ошибка в OS/2, использование DosKillThread может создать некоторые проблемы. emx.dll автоматически избегает использовать DosKillThread в OS/2 2.1 или более старой. Для OS/2 2.11 и новее, вы можете использовать option -K для отключения использования DosKillThread. В данный момент DosKillThread не используется emx.dll и эта опция не производит никакого эффекта.

Опции emx (DOS)

-c Отключение дампа памяти вызванного сигналами и исключениями
-d Не использовать extended память
-e Перенаправить стандартный вывод ошибок (2) на стандартный вывод (1)
-h# Set DOS file handle limit to #. The number # must be between 10 and 65536. This option is ignored for DOS versions earlier than 3.30. This option does not change the emx limit for the number of files per process -- that limit is always 40
-m1 При запуске на Fujitsu FMR70 (еще не реализовано)
-m2 При запуске на NEC PC-98 (еще не реализовано)
-m3 При запуске на Intel Inboard 386/PC
-o

Отправить дамп регистров при исключении на стандартный вывод (stdout). Без -o дамп регистров посылается на консоль (CON). Вам необходима опция -o для перенаправления дампа регистров в файл.

Сейчас emx создает файл дампа памяти (данный перевод не совсем точен, т.к. сохраняется не только память) (файл называется 'core') вместо дампа регистров. Пожалуйста, оставте этот файл, т.к. он требуется для отладки программы автором.

-q Все аргументы командной строки, передаваемые дочернему процессу, будут повторены без разбора. Т.е. расширения масок и файлы ответа не будут работать в процессах, для которых указаа опция -q.
-r* Добавлять имя диска * к абсолютным именам файла. Если имя файла начинается с /, но не с //, /dev/ или /pipe/, будут добавлены * плюс двоеточие. Если указан ключ, то имя файла \mydir\abc будет преобразовано к d:\mydir\abc. Заметим, что данная опция может привести к неожиданным результатам.
-t*

Усекать имена файлов до формата 8.3. Каждая часть пути усекается до формата 8.3, остаются первые 8 символов до точки и первые три символа после точки. Это полезно при компиляции программ на файловой системе FAT с минимальными изменениями.

Без агрумента, -t включает усечение для всех дисков и для имен UNC.

Опция -t может иметь опциональные аргументы, которые указывают имена дисков, файлы на которых должны урезаться. Специальное имя '/' контролирует усечение имени файла в UNC путях. Например: опция `-tc/' указывает, что усечение будет производиться для диска C и UNC путей.

Если аргумент опции -t - символ `-', усечение отключается для всех дисков и UNC путей. Это установка по умолчанию. Если аргумент начинается с символа `-', то усечение отключается для всех дисков, указанных далее. Например, при опциях `-t -t-d' UNC пути и все файлы на всех дисках, за исключением диска D, будут усекаться.

-E Не проверять наличие 387-го сопроцессора. Принимается, что сопроцессор отсутствует.
-O Не проверять версию XMS. По умлочанию, emx проверяет XMS на версию, которая должна быть равна 2.0 или новее, а версия драйвера XMS должна быть 2.06 или новее, т.к. старые версии драйвера himem.sys работают некорректно. Вы можете отменить эту проверку указав опцию -O (для драйверов с иной нумерацией версий), но emx может все равно не работать с вашим драйвером XMS. emx небыл протестирован с himem.sys версии 2.05. Версия 2.04 не прошла проверку, а версия 2.06 работала корректно.
-V Показать версию emx. При запуске программы, будет отображена версия emx
-X Не использовать XMS память. Использование XMS памяти с VCPI - новая возможность emx. При возникновении проблем используйте опцию -X.

Утилита emxstack

Утилита emxstack используется для просмотра и изменения размера стека. Старые програмы подразумевают, что emx.dll выделяет память под стек, если не хватает размера стека. Т.к. emx.dll больше этого не делает, то программы должна быть исправлена.

    emxstack <команда> [<опции>] <файлы>...

Поддерживаются следующие команды:

-c Проверить необходимость исправления размера стека. Для каждого файла, если размер стека слишком мал, будет отображено сообщение. Если размер стека достаточно большой, то сообщение не отображается.
-d Показать размер стека. Для каждого файла отображается размер стека в килобайтах.
-f Исправить размер стека. Для каждого файла будет исправлен размер стека, если тот слишком мал.
-s<размер> Установить размер стека. Для каждого файла будет установлен размер стека равным <размер> килобайт.
-u<размер> Обновить размер стека. Для каждого файла установить размер стека равным <размер> килобайт, если размер меньше <размер> килобайт. Если размер стека больше <размер> килобайт, то размер не меняется.

Поддерживаются следующие опции:
-p Применить ко всем файлам найденым в каталогах из переменной окружения PATH. Команда будет применена ко всем файлам найденным в каталогах, которые указаны в переменной окружения PATH. Имена файлов не должны быть указаны в командной строке.
-q Быть молчаливым. Сообщения отображаться не будут. Однако, сообщения об ошибках не будут подавляться.
-v Быть говорливым. Показывать подробные сообщения.

Например:
    emxstack -f *.exe

Утилита emxupd

Утилита emxupd может заменять (и удалять) DLL, которые сейчас используются. (Также могут быть заменены и EXE-файлы.) Старые версии DLL остаются в памяти и используются программами до тех пор, пока не завершатся все приложения, использующие DLL. После этого будут использоваться новые DLL. Перезагрузка также позволяет начать использовать новые DLL.

Замена DLL

Для замены DLL, введите

    emxupd  

Данная команда копирует в каталог или файл . Например:

    emxupd c:\tmp\emx.dll c:\emx\dll

Данная команда копирует c:\tmp\emx.dll в c:\emx\dll\emx.dll.

    emxupd abc.dll d:\dll\new.dll
Данная команда копирует abc.dll в d:\dll\new.dll.

Удаление DLL

Для удаления DLL, введите

    emxupd -d <старый_файл>
где <старый_файл> путь и имя DLL для удаления.

Распаковка DLL из ZIP файла и установка их с помощью emxupd

Для распаковки всех DLL из ZIP-файла и установки их в каталог с помощью emxupd, введите:

    emxuzdll <zip_file> <dll_dir>
где
    <zip_file> - имя и путь ZIP-файла для распаковки; 
    <dll_dir> - каталог, куда распаковать DLL.
emxuzdll может быть использован только в случае, если в текущем каталоге отсутствуют DLL.

Решение проблем

Эта секция показывает как решить проблемы относящиеся к пакету emx runtime.

Предупреждение `WARNING: emx 0.9d or later required'

Если выводиться это сообщение, значит используется устаревшая версия emx.dll. Проверьте, чтобы последняя версия emx.dll была доступна в каталоге, указанном в LIBPATH в файле config.sys. Введите

    emxrev -p c:\config.sys
для просмотра всех динамических библиотек emx доступных через LIBPATH в c:\config.sys (вместо c: используйте букву загрузочного диска). Для простоты держите одну версию каждой DLL. Старые программы работают с новыми DLL emx, но не наоборот.

unzip.exe пишет `cannot create emx/dll/emx.dll'

Это происходит при попытке распаковать emxrt.zip, если emx.dll используется какой-либо программой. Завершите все программы, которые используют emx.dll и попробуйте снова. Если вы запускали emxrev, то командный процессор оставляет emx.dll загруженным, пока не завершится. Т.е. вы можете закрыть все оконные и полноэкранные сессии OS/2, в которых вы запускали emxrev. Все это справедливо и для emxlibcm.dll и пр.

emx.dll не может быть удален, переименован или перезаписан

См. предыдущую проблему.

Сообщение об ошибке `SYS1804: The system cannot find the file EMX.'

Вы, скорее всего, неверно установили LIBPATH в config.sys, в результате чего emx.dll не может быть найден.

Сообщение об ошибке `rsx not found, DPMI not supported by emx'

Текущая версия emx не может использовать DPMI. В результате загрузчик пытается использовать rsx вместо emx, но не может найти rsx. Решение: установите rsx или остановите DPMI сервер (MS Windows).

Сообщение об ошибке `emx.dll: Stack size too small... (emx.dll: Размер стека слишком мал...)'

Вы попытались запустить старую программу (которая подразумевает, что emx.dll создает объект стека (stack object), если размер стеки слишком мал).

Запустите emxstack как указано в сообщении об ошибке для исправления размера стека в программе. Если это невозможно (потому что вы не имеете прав записи на файл), то введите

    set emxopt=-I
для того, чтобы emx.dll игнорировал проблему. Однако, програма может "упасть" (crash) из-за нехватки стека. Использование опции -I не рекомендуется!

Сообщение DOS `Sector not found (Сектор не найден)'

DOS может отобразить это сообщение, если файл открыт дважды (один хэндл на чтение и один на запись). Например, это происходит, когда GCC запускается, а имен временных файлов не хватает. Найдите файлы cca00002, ccz00002 и т.п. (числа могут быть различными) в вашем временном каталоге и удалите их.

Сообщения emx

Сообщения emx (OS/2)

core dumped
(Дамп памяти сохранен)
Программа не может выполняться дальше из-за фатальной ошибки (исключения). При этом создается образ памяти программы (дамп памяти) в файле с именем `core'. Пожалуйста, оставьте этот файл, т.к. он используется автором программы для отладки.
emx.dll: Stack size too small...
(emx.dll: Размер стека слишком мал...)
Вы попытались запустить старую программу (которая подразумевает, что emx.dll автоматически увеличивает стек, если его размер слишком мал). Вы можете использовать emxstack для исправления размера стека.
Invalid option in EMXOPT
(Неверная опция в переменной EMXOPT)
Опция, указанная в переменной окружения EMXOPT не распознана emx.
Invalid syscall function code
(Неверный код системной функции)
Программа запущенная emx вызвала неверную системную функция. Наиболее вероятно, что вы используете устаревшую версию emx.dll.
WARNING: emx 0.9d or later required
(ВНИМАНИЕ! требуется emx 0.9d или новее)
Если выводиться это сообщение, значит используется устаревшая версия emx.dll. Проверьте, чтобы последняя версия emx.dll была доступна в каталоге, указанном в LIBPATH в файле config.sys. Введите
        emxrev -p c:\config.sys
для просмотра всех динамических библиотек emx доступных через LIBPATH в c:\config.sys (вместо c: используйте букву загрузочного диска). Для простоты держите одну версию каждой DLL. Старые программы работают с новыми DLL emx, но не наоборот.

Сообщения emx (DOS)

Abnormal program termination
(Некорректное завершение программы)
Программа приняла сигнал SIGABRT. Была вызвана функция abort() или принят сигнал SIGABRT.
Bad environment
(Некорректное окружение)
Имя программы не может быть найдено в сегменте окружения или сегмент окружения длиннее 32768 байт. На практике этого не должно произойти.
Cannot create swap file
(Невозможно создать файл подкачки)
Файл подкачки не может быть создан. Решение: убедитесь, что файл подкачки может быть создан в каталоге указанном в переменной окружения EMXTMP (или TMP). Если EMXTMP и TMP не установлены, то emx будет создавать файл подкачки в корневом каталоге текущего диска.
Cannot enable A20
emx попытался enable address line A20 и обломался :). Решение: свяжитесь с автором.
Cannot enable A20 via XMS
emx попытался enable address line A20 через драйвер XMS и обломался :). Возможно, адресная линия A20 не может быть включена. Решение: неизвестно.
Cannot open program file
(Невозможно открыть файл программы)
Файл программы, указанный в командной строке emx не может быть найден или открыт. Решение: Введите верное имя файл. (Этого не должно происходить с интегрированными программами.)
Cannot read program file
(Невозможно прочесть файл программы)
Произошла ошибка во время чтения файла программы. Решение: убедитесь, что файл программы указанный в командной строке emx верен (это не применимо для программ интегрированных с emx). Возможно, что другие программы используют этот файл.
core dumped
(Дамп памяти сохранен)
Программа не может выполняться дальше из-за фатальной ошибки (исключения). При этом создается образ памяти программы (дамп памяти) в файле с именем `core'. Пожалуйста, оставьте этот файл, т.к. он используется автором программы для отладки.
DPMI not supported
(DPMI не поддерживается)
Текущая версия emx не поддерживает DPMI. Может быть будущие версии emx будут это делать. Решение: остановите сервер DPMI (MS Windows) или используйте rsx.
emx not found
(Не найден emx)
Загрузчик emx (emxl.exe) не может найти emx.exe. Проверьте, что каталог, содержащий emx.exe указан в переменной окружения PATH. В качестве альтернативы, вы можете установить переменную окружения EMX, чтобы она содержала полный путь и имя emx.exe.
Exception ...
(Исключение ...)
Программа, запущенная emx, попыталась сделать что-то, что считается процемморои или emx неверным. Решение: Сообщите поставщику программы.
Illegal moucall function
(Неверная функция moucall)
Запущенная emx программа вызвала неверную системную функция. Решение: сообщите поставщику программы.
Illegal syscall function
(Неверная функция syscall)
Запущенная emx программа вызвала неверную системную функция. Решение: сообщите поставщику программы.
Illegal viocall function
(Неверная функция viocall)
Запущенная emx программа вызвала неверную системную функция. Решение: сообщите поставщику программы.
Invalid arguments for DOS function xx
(Неверные аргументы для функции DOS xx)
Запущенная emx программа использовала неверные аргументы при вызове системной функции. Решение: сообщите поставщику программы.
Invalid emx option
(Неверная опция emx)
Опция в EMXOPT или установленная с помощью emxbind непонятна emx. Решение: проверьте EMXOPT. Используйте emxbind -i для отображения опций установленных с помощью emxbind.
Invalid program file
Программный файл, указанный в командной строке emx (или bound to emx), поврежден. Решение: перезагрузите программу с дискеты. Если это не помогает, то вы можете связаться с поставщиком программы.
Invalid special function code: xx
Запущенная emx программа вызвала неверную системную функция. Решение: сообщите поставщику программы.
Linear address space exhausted
Программа, запущенная emx, использует слишком много памяти. Решение: сообщите автору.
Nonmaskable interrupt (NMI) at xxxx:yyyyyyyy
(Немаскируемое прерывание (NMI) по адресу xxxx:yyyyyyyy)
Произошло немаскируемое прерывание. Возможно это связано с ошибкой памяти. Решение: если вы используете DESQview, то установите уровень защиты в 0 или используйте опцию QEMM-386 WATCHDOG=0. В прочих случаях запустите программу проверки памяти.
Out of memory
(Мало памяти)
Мало памяти для запуска emx. Решение: удалите некоторые драйвера и/или резидентные программы. Или добавьте памяти на вашу машину.
Out of stacks
(Мало стека)
emx вышла за пределы локального стека. Решение: сообщите автору.
Out of memory or swap space
(Мало памяти или места на диске для файла подкачки)
emx не может произвести запись в файл подкачки, т.к. на диске осталось мало места. Решение: Убедитесь в наличии достаточного свободного объема на диске используемом для файла подкачки. Используйте переменную окружения EMXTMP (или TMP) для того, чтобы указать месторасположение файла подкачки. Если ни EMXTMP, ни TMP не установлены, то emx будес создавать файл подкачки в корневом каталоге текущего диска.
Out of swap space
(Мало места на диске для файла подкачки)
emx не может произвести запись в файл подкачки, т.к. на диске осталось мало места. Решение: Убедитесь в наличии достаточного свободного объема на диске используемом для файла подкачки. Используйте переменную окружения EMXTMP (или TMP) для того, чтобы указать месторасположение файла подкачки. Если ни EMXTMP, ни TMP не установлены, то emx будес создавать файл подкачки в корневом каталоге текущего диска.
Process terminated by SIGINT
(Процесс остановлен по сигналу SIGINT)
Вы остановили программу нажатием Ctrl-C или Ctrl-Break.
Process terminated by SIG...
(Процесс остановлен по сигналу SIG...)
Программа была остановлена по сигналу или исключению. Обычно это означает необратимую ошибку в программе.
Program aborted
(Программа прервана)
Вы прервали выполнение программы ответив `Abort' (Прервать) после появления критической ошибки.
rsx not found, DPMI not supported by emx
(rsx не найден, DPMI не поддерживается emx)
Текущая версия emx не может использовать DPMI. Возможно, загрузчик попытался загрузить rsx вместо emx, но не может его найти. Решение: уствновите rsx или остановите сервер DPMI (MS Windows).
Swap file I/O error
(Ошибка ввода/вывода при операциях с файлом подкачки)
emx не может прочесть или записать файл подкачки.
This program does not run in DOS mode of OS/2
(Эта программа не работает в DOS режиме OS/2)
Эмуляция DOS в OS/2 не поддерживает emx. Решение: загрузите DOS или запустите программу в окне OS/2.
This program requires an 80386 CPU
(Эта программа требует 80386 процессор)
Для запуска необходим процессор 80386DX, 80386SX, i486 или более новый. Решение: используйте более новый компьютер.
This program requires DOS 3.0 or later
(Эта программа требует DOS 3.0 или новее)
Ели emx интегрирован с приложением в один исполняемый файл, то для запуска требуется DOS версии 3.0 или новее.
Too many processes
(Слишком много процессов)
emx поддерживает до 4 процессов. Вы попытались запустить 5 или более процессов.
Unexpected interrupt
(Неожиданное прерывание)
Этого не может быть. Решение: сообщите автору.
Unsupported VDISK.SYS version
(Неподдерживаемая версия VDISK.SYS)
emx не поддерживает используемый вами драйвер устройства vdisk.sys. Решение: удалите VDISK.SYS или используйте другую версию. emx может работать с vdisk.sys 3.3 или новее.
Unsupported XMS version
(Неподдерживаемая версия XMS)
emx требует himem.sys 2.06 или новее (более старые версии содержат много ошибок). Решение: используйте более новую версию himem.sys. Если вы не используете himem.sys, то используйте опцию emx -O и сообщите автору, работает это или нет.
Unusable interrupt vector mappings set by VCPI server
Настройка сервера VCPI (драйвера EMS) неверна. Решение: читайте руководство по драйверу EMS.
Use emxbind
(Используйте emxbind)
Вы попытались запустить emxl.exe, для чего он не преднызначен. emxl.exe создан для встраивания в исполняемый файл с помощью emxbind.
Virtual mode not supported without VCPI
(Виртуальный режим не поддерживается без VCPI)
Если процессор находиться в виртуальном режиме, то для запуска emx требуется сервер VCPI. Вы получите это сообщение если вы используете драйвер EMS (эмулятор EMS) который не поддерживает VCPI или если вы отключили EMS. Решение: удалите драйвер EMS и используйте драйвер EMS который поддерживает VCPI или включите EMS если она была отключена (например, удалите слово NOEMS из командной строки драйвера EMX).
Wrong emx version
(Неверная версия emx)
Версия emx.exe не соответствует версии для которой скомпилирована программа. Решение: ипользуйте копию emx.exe, которая поставляется с программой. Если вы используете различные программы, которые требуют различные версии emx, то используйте перед запуском программы переменную окружения EMX для указания пути к необходимой версии emx.exe. Вы также можете использовать emxbind -u для встраивания корректной версии emx.exe в исполняемый файл.

Полный комплект пакета emx

emx доступен на анонимных ftp-серверах по адресам:
    ftp.leo.org:          /pub/comp/os/os2/leo/gnu/emx+gcc/
    ftp-os2.cdrom.com:    /pub/os2/emx09d/
    ftp-os2.nmsu.edu:     /pub/os2/dev/emx/v0.9d/

Автор emx

Автор emx:
    Eberhard Mattes
    Teckstrasse 81                                      (TeX: Teckstra\ss e)
    D-71696 Moeglingen                                  (TeX: M\"oglingen)
    Germany

Internet:
    mattes@azu.informatik.uni-stuttgart.de  (возможно изменится)
    mattes@windhager.de

Не звоните пожалуйста! Проблема игнорирования писем может быть в том, что вы не прислали обратный конверт (а также international postal reply coupon, если вы не из Германии) или не точно указали адрес.

Прочтите \emx\doc\faq.doc прежде чем спрашивать у автора.

Юрий Прокушев
E-Mail: prokushev@freemail.ru
NetMail: 2:5000/106.9

---
Интересные ссылки:

---

---
Комментариев к странице: 0 | Добавить комментарий
---
Редактор: Дмитрий Бан
Оформление: Евгений Кулешов
(C) Russian Underground/2