The Russian Electronic Developer Magazine | |
Русский электронный журнал разработчика | |
Данная статья является переводом оригинальной документации по emx runtime версии 09d fix 3. Переводчик не претендует на точность перевода, так как выполнялся он для собственных нужд, как для лучшего понимания работы emx, так и для тренировки в переводах. Переводчик будет рад вашим замечаниям и исправлениям. Домашняя страница статьи http://emx.nm.ru.
Это документация по пакету 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\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 не работает с 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 для 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 вступили в силу.
Функционирование emx и программ emx управляется некоторыми переменными окружения. Вы можете установить одну или несколько из следующих переменных окружения:
Переменная окружения 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 последнего воскресения октября. Перевод осуществляется на один час.
Nonmaskable interrupt (NMI)или установите равным 0 уровень защиты или используйте опцию WATCHDOG=0 QEMM-386.
Если компьютер зависает во время работы emx, попробуйте нажать Ctrl-Break пять раз в секунду. Это прервет работу emx (и всех программ emx запущенных под этой копией emx), если зависание произошло не во время вызова функции DOS. Если зависание произошло в функции DOS, emx выгрузиться после возвращения из этой функции DOS.
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 установкой переменной окружения EMXOPT. Эта переменная окружения содержит список опций, наподобие опций в командной строки. Опции должны быть разделены как минимум одним пробелом. Например:
set emxopt=-c -h40
-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 и эта опция не производит никакого эффекта. |
-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 используется для просмотра и изменения размера стека. Старые програмы подразумевают, что emx.dll выделяет память под стек, если не хватает размера стека. Т.к. emx.dll больше этого не делает, то программы должна быть исправлена.
emxstack <команда> [<опции>] <файлы>...
Поддерживаются следующие команды:
-c | Проверить необходимость исправления размера стека. Для каждого файла, если размер стека слишком мал, будет отображено сообщение. Если размер стека достаточно большой, то сообщение не отображается. |
-d | Показать размер стека. Для каждого файла отображается размер стека в килобайтах. |
-f | Исправить размер стека. Для каждого файла будет исправлен размер стека, если тот слишком мал. |
-s<размер> | Установить размер стека. Для каждого файла будет установлен размер стека равным <размер> килобайт. |
-u<размер> | Обновить размер стека. Для каждого файла установить размер стека равным <размер> килобайт, если размер меньше <размер> килобайт. Если размер стека больше <размер> килобайт, то размер не меняется. |
-p | Применить ко всем файлам найденым в каталогах из переменной окружения PATH. Команда будет применена ко всем файлам найденным в каталогах, которые указаны в переменной окружения PATH. Имена файлов не должны быть указаны в командной строке. |
-q | Быть молчаливым. Сообщения отображаться не будут. Однако, сообщения об ошибках не будут подавляться. |
-v | Быть говорливым. Показывать подробные сообщения. |
emxstack -f *.exe
Утилита emxupd может заменять (и удалять) DLL, которые сейчас используются. (Также могут быть заменены и EXE-файлы.) Старые версии 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, введите
emxupd -d <старый_файл>где <старый_файл> путь и имя DLL для удаления.
Для распаковки всех DLL из ZIP-файла и установки их в каталог с помощью emxupd, введите:
emxuzdll <zip_file> <dll_dir>где
<zip_file> - имя и путь ZIP-файла для распаковки; <dll_dir> - каталог, куда распаковать DLL.emxuzdll может быть использован только в случае, если в текущем каталоге отсутствуют DLL.
Эта секция показывает как решить проблемы относящиеся к пакету emx runtime.
Если выводиться это сообщение, значит используется устаревшая версия emx.dll. Проверьте, чтобы последняя версия emx.dll была доступна в каталоге, указанном в LIBPATH в файле config.sys. Введите
emxrev -p c:\config.sysдля просмотра всех динамических библиотек emx доступных через LIBPATH в c:\config.sys (вместо c: используйте букву загрузочного диска). Для простоты держите одну версию каждой DLL. Старые программы работают с новыми DLL emx, но не наоборот.
Это происходит при попытке распаковать emxrt.zip, если emx.dll используется какой-либо программой. Завершите все программы, которые используют emx.dll и попробуйте снова. Если вы запускали emxrev, то командный процессор оставляет emx.dll загруженным, пока не завершится. Т.е. вы можете закрыть все оконные и полноэкранные сессии OS/2, в которых вы запускали emxrev. Все это справедливо и для emxlibcm.dll и пр.
См. предыдущую проблему.
Вы, скорее всего, неверно установили LIBPATH в config.sys, в результате чего emx.dll не может быть найден.
Текущая версия emx не может использовать DPMI. В результате загрузчик пытается использовать rsx вместо emx, но не может найти rsx. Решение: установите rsx или остановите DPMI сервер (MS Windows).
Вы попытались запустить старую программу (которая подразумевает, что emx.dll создает объект стека (stack object), если размер стеки слишком мал).
Запустите emxstack как указано в сообщении об ошибке для исправления размера стека в программе. Если это невозможно (потому что вы не имеете прав записи на файл), то введите
set emxopt=-Iдля того, чтобы emx.dll игнорировал проблему. Однако, програма может "упасть" (crash) из-за нехватки стека. Использование опции -I не рекомендуется!
DOS может отобразить это сообщение, если файл открыт дважды (один хэндл на чтение и один на запись). Например, это происходит, когда GCC запускается, а имен временных файлов не хватает. Найдите файлы cca00002, ccz00002 и т.п. (числа могут быть различными) в вашем временном каталоге и удалите их.
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, но не наоборот.
Abnormal program termination (Некорректное завершение программы)Программа приняла сигнал SIGABRT. Была вызвана функция abort() или принят сигнал SIGABRT.
Bad environment (Некорректное окружение)Имя программы не может быть найдено в сегменте окружения или сегмент окружения длиннее 32768 байт. На практике этого не должно произойти.
Cannot create swap file (Невозможно создать файл подкачки)Файл подкачки не может быть создан. Решение: убедитесь, что файл подкачки может быть создан в каталоге указанном в переменной окружения EMXTMP (или TMP). Если EMXTMP и TMP не установлены, то emx будет создавать файл подкачки в корневом каталоге текущего диска.
Cannot enable A20emx попытался enable address line A20 и обломался :). Решение: свяжитесь с автором.
Cannot enable A20 via XMSemx попытался 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 в исполняемый файл.
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/
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
Интересные ссылки: Обучение бизнесу с нуля в москве 62 бизнес.
Комментариев к странице: 0 | Добавить комментарий
Редактор: Дмитрий Бан
Оформление: Евгений Кулешов
(C) Russian Underground/2