Wrapper

Материал из ISPWiki
Версия от 10:55, 10 ноября 2015; Ksenya (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Все бинарные файлы в каталоге sbin - это ссылки на файл wrapper. Это сделано для того, чтобы CORE не зависел от предустановленных в системе библиотек, а использовал те, которые мы поставляем вместе с ним. Задачей wrapper является: выставить переменную окружения LD_LIBRARY_PATH, загрузить одноименный .so файл из каталога libexec и выполнить функцию ispmain, семантика которой полностью совпадает со стандартной функцией main.

Порядок работы wrapper следующий:

  • выставляет переменную окружения LD_LIBRARY_PATH в external:lib
  • определяет рабочий каталог программы (каталог, который содержит каталоги libexec и sbin) и переходит в него.
  • загружает одноименный .so файл из каталога libexec (т.е. если ваш исполняемый файл называется dummy, то будет загружен файл libexec/dummy.so)
  • выполняет функцию ispmain передавая ей в качестве параметров - параметры полученные функцией main.

Кроме этого, wrapper самостоятельно отвечает, если в командной строке указан ключ -T. Вместо того, чтобы последним действием вызвать ispmain, в случае успешной загрузки всех библиотек в стандартный вывод будет отправлена строка UPDATE_CONTROL_STRING - это макрос, описанный в файле ispbin.h. В противном случае будет выведен текст с описанием ошибки. Это сделано для проверки программы на работоспособность после обновления системы.

Все эти сложности необходимы для работы unix систем, в windows все это не актуально.

ispmain

В состав CORE включен файл ispbin.h. В нем описан макрос ISP_MAIN. Мы предлагаем использовать этот макрос вместо явного указания ispmain.