Thu, 17 May  |   Login English version  |  OS2.Ru  
В начало
Об OS/2
Новости
Публикации
DevCenter
База данных
Каталог ресурсов
Биржа труда
TeamDB
Форумы и общение
Опросы и конкурсы
Russian Team OS/2
На первую страницу OS2.Ru
 Вокруг OS/2 |  Программы и технологии |  Аппаратура |  Разработчикам |  Мастерская
Поиск по: Добавить закладку OS2.Ru в панель Netscape 6/Mozilla
OS2.Ru > Articles > Dev > Prog > Runtime
2000-10-26
Sergey
(версия для печати)

Использование встроенного рантайма функций языка С

Статья рассказывает о рантайме встроенном в OS/2 начиная с версии 4 и о путях его использования.

Так получилось, что сразу после MS (PC)-DOS мне довелось работать на AIX там я узнал для себя очень много нового и одним из таких знаний стало то, что в AIX есть библиотека системных функций которую можно динамически вызывать из своих программ. Благодаря такой функции мои программы на AIX (даже учитывая, что это RISC процессор) были в разы меньше того, что было под DOS.

Когда я обнаружил очередное творение IBM (OS/2) для персоналок я установил его и стал работать на персоналках. Долгие годы разборок с нею и её внутренностями привели меня в годы использования Warp 3 (с фикспаками) к обнаружению этого самого рантайма С функций. Он размещался (и по сей день там-же) в DLL файлах директории \os2\dll\clib*.dll. Я никак не мог смириться с тем, что такая чудесная вещь никак мною не задействована и я стал копать вширь и вглубь. В конце концов я скачал ToolKit v4, и нашел там некие средства для использования этого рантайма, а именно файлы: libc*.lib. Только одно НО, я программирую в Watcom C а его линкер не понимал форматов этих библиотек. Пришлось ставить VAC++.
Это всё в прошлом.


Какова ситуация на сегодняшний день?

В OS/2 по прежнему есть рантайм С функций, и по-прежнему его мало кто использует (я знаю только NetDrive)! Хотя, на мой взгляд преимущества, его использования очевидны:

  • уменьшается код программ,
  • уменьшается используемая системой память, так как каждая программа уже не несёт в себе набора используемых С функций,
  • при количестве программ использующих данный рантайм больше одной сокращается время загрузки приложений, так как библиотека будет уже в памяти.


Что нужно для использования данного рантайма?

  • Компилятор VAC v 3.0.8 (по словам самой IBM VAC++ 3.6.5 не поддерживает данный рантайм, буду рад если кто-то докажет, что это не так) или Watcom C (с некоторыми модификациями);
  • OS/2 Toolkit v 4.5 -- это самый последний тулкит для OS/2 и если вы используете Watcom, то вам необходим именно он.

Прочтите документацию в файле os2tk45\book\xpg4ref.inf там подробно описаны все функции. К сожалению нет описания библиотек os2tk45\lib\libc*.lib. Вот что мне удалось выяснить из переписки с составителями ToolKit (в будущих версиях они включат это в документацию):

The C-runtime DLL's shipped with OS/2 V4.0 (and above) are XPG4
compliant. They are based upon the source code to the VisualAge
C++ rutimes, but are modified to use OS/2 internationalization.
DLL с рантаймом С функций поставляются с 4 версией OS/2 (и выше)  соответствуют стандарту XPG4. Они основаны на исходном коде библиотеке рантайма от VisualAge, но модифицированы для использования функций интернационализации имеющейся в OS/2.

The DLL's in question are: (DLL файлы вызвавшие вопросы)

\OS2\DLL\LIBCM.DLL - Multi-threaded library многопоточная версия
\OS2\DLL\LIBCS.DLL - Single-threaded library если у вас один поток в программе
\OS2\DLL\LIBCN.DLL - Subsystem library Subsystem -- используется при написании драйверов

The appropriate compiler flags (-Gm+, -Gm-, and -Rn) should be used
when building code to use these DLL's.
Необходимо использование соответствующих флагов компилятора при компилировании программ, использующих рантайм: -Gm+, -Gm-,  -Rn

The following LIB files should be used if you are building your code
using the _Optlink calling convention (-Mp, the default setting):
Следующие LIB файлы должны быть использованы, если вы компилируете используя стиль вызовов _Optlink (-Mp установка по умолчанию)

libcni.lib - Subsystem library
libcsi.lib - Single-threaded library
libcmi.lib - Multi-threaded library

The following LIB files should be used if you require the _System
calling convention (i.e., you are compiling with the -Ms option):
Файлы перечисленные ниже используются если вы хотите использовать стиль вызовов _System

libcnsi.lib - Subsystem library
libcssi.lib - Single-threaded library
libcmsi.lib - Multi-threaded library

You must also force the _LNK_CONV identifier to the value of "_System"
prior to including the libc headers.
Вы также должны установить идентификатор _LNK_CONV в значение "_System" перед использованием файлов заголовков рантайма

Steve Turner, OS/2 Developer's Tools, Austin, TX.

Файлы заголовков рантайма ToolKit v 4.5 расположены в директории os2tk45\h\libc.


Компиляция.

В обоих компиляторах необходимо отключить использование "генерации информации стандартных библиотек".

Компиляция с VAC++ v 3.0.8 не должна вызвать никаких затруднений, если кто-то проверит это для версии VAC++ 3.6.5 и напишет комментарий мы (все) будет только рады. За себя могу сказать что это работает в VAC++ v4.

Watcom тут всё немного сложнее. Внутренности компилятора очень сильно завязаны на использование внутренних функций работы с памятью, поставляемых в комплекте с ним. Я имел общение с человеком из Sybase в группе новостей *.openwatcom на сервере news.scitechsoft.com (именно эта компания является координатором разработки OpenSource версии компилятора Watcom) и выяснил следующее: необходимо исключить из стандартной библиотеки функции работы с памятью, но тогда всё упирается в один внутренний модуль, который к счастью можно заменить своей пустышкой. Кроме того Watcom при отключении "генерации информации стандартных библиотек" перестаёт использовать startup code и вы лишаетесь, например, argv и argc -- параметров командной строки, но всё это решаемо.
Итак:

Поверьте, игра стоит свеч (свичей? свечей? ).

Если кто-то получит какую-то дополнительную информацию, пожалуйста поделитесь с нами, чтобы хоть как-то поспособствовать повышению качества программирования в OS/2.

Обсудить материал (число отзывов:0)


предыдущий материал  |  следующий материал


 Вокруг OS/2 |  Программы и технологии |  Аппаратура |  Разработчикам |  Мастерская


Новости
15/08: GoldenCode выпустит Java 1.4 для OS/2
14/06: Fix #16 rus / Warp4
30/05: Перерыв в работе OS2.Ru
Все новости..

В каталоге
Дерево каталога
Новые поступления

Публикации
Боремся с зависанием PM и зомби - WatchCat + HardKill
(Samorukov Alex , 2001-10-11)

DSync - куда может быть проще?
(Okounkov Konstantin, 2001-09-28)

WarpGoGo: переводим музыку в MP3
(Okounkov Konstantin, 2001-09-26)

Все материалы

Решения
Tips & tricks

Активные опросы
Используете ли Вы OS2.Ru tab в Netscape ?

Все опросы
Первая страница  |   Об OS/2  |   Новости  |   Публикации  |   База данных  |   Каталог ресурсов  |   Биржа труда  |   TeamDB  |   Форумы общения  |   Опросы и голосования  |   OS2.Ru DevCenter
Дизайн, оформление © 1996-2000 Copyright WebTeam. Использование материалов OS2.Ru без согласия авторов и координаторов запрещено
Powered by OS/2