Releasing units without source code/ru

From Lazarus wiki
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

English (en) español (es) Bahasa Indonesia (id) русский (ru)

Иногда полезно закрыть общий доступ к исходному коду модуля, например в следующих случаях:

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

FreePascal позволяет сделать это следующим образом.

Поставщику и Владельцу исходного кода модуля необходимо:

  • Скомпилировать модуль отдельно. Для этого используйте параметр компилятора -Ur
  • Опубликовать два получившихся *.ppu и *.o файлы. (см. раздел 3.3 руководства пользователя)

Пользователю модуля необходимо:

  • Скомпилировать программу с использованием *.ppu и *.o файлами. (для этого используйте параметр компилятора -Fu)

Примечание

  • Владельцу и Пользователю кода нужно иметь одинаковые версии компилятора.
  • Целевая ОС модуля, должна соответствовать ОС, для которой компилируется программа.
  • Если код модуля зависит от другого модуля(ей), то все модули, от которых он зависит, должны быть совместимы с ним. Для проверки совместимости модулей между собой, компилятор использует контрольные суммы, встраиваемые в * .ppu файлы. С помощью опции компилятора -vu вы можете проверить совместимость модулей между собой. Если какой-то из файлов, используемых модулем, изменился, то компилятор выведет строку вида: Recompiling ..., checksum changed for ... (Перекомпиляция… контрольная сумма изменилась для…)
  • Рекомендуется использовать стабильный релиз компилятора, поскольку все модули неявно зависят от модуля System.
  • При компиляции модуля иногда могут использоваться опции, отличающиеся от опции текущего проекта. Например:
    • -M (Режим)
    • -C (Проверка), такая как -Cr (проверка диапазона), -Ci (проверка ввода/вывода), -Co (проверка переполнения), -Ct (проверка стека)
    • -Sa (Использовать assert в скомпилированном коде)
    • -O (Оптимизация)
    • -gl (Генерирует lineinfo код)
  • Для некоторых старых версий компилятора, имена модулей не должны содержать заглавных букв.

Смотрите так же