Динамическое связывание среды выполнения ada

Я установил GPS GPS 6.1.1 (20150118) на i686-pc-mingw32 GNAT GPL 2015 (20150428-49).

Он успешно компилирует Hello World, но даже исполняемый файл релиза огромен, поскольку он включает в себя статически скомпилированную неоптимизированную среду выполнения и (что более важно), насколько я понимаю, среда выполнения ada распространяется под лицензией GPL и не может быть статически связана с исполняемым файлом с закрытым исходным кодом. .

Как я могу настроить GPS/gcc для динамического связывания среды выполнения?


person trbvm    schedule 01.02.2016    source источник
comment
Проблема с GNAT по сравнению с GPL заключается в том, что когда вы строите на основе конкретной RTS, ваше участие в RTS заключается в том, что (а) ваш код может потребовать создания экземпляров кода RTS, что эффективно всасывает RTS в ваше приложение, и (б) интерфейс между GCC и RTS могла быть изменена, что затрудняет замену одной RTS другой во время выполнения (т. е. путем замены динамических библиотек).   -  person Simon Wright    schedule 01.02.2016


Ответы (2)


Это очень близко к этому вопросу и тому же ответ применим.

Однако, если вы предпочитаете редактировать свойства проекта в GPS через диалоговое окно Проект > Свойства:

  1. перейдите на вкладку Переключатели (слева)

  2. перейдите на вкладку Binder (вверху)

  3. установите флажок Общее время выполнения GNAT.

Пока вы там, установите флажок Сохранить стек вызовов в исключениях; это может помочь в отладке необработанного исключения (переключатель связывания — -E).

person Simon Wright    schedule 01.02.2016
comment
Хорошо, моя проблема заключалась в отсутствии пакетов Binder, Compiler и Linker в файле проекта .gpr (почему компиляция работала?). После их добавления вручную все необходимые опции стали доступны на странице Switches. Думаю, мне следовало создать новый проект, используя простой шаблон проекта. - person trbvm; 01.02.2016

Я позволю кому-то другому ответить на конкретный вопрос, который (IMO) хороший.

Также хороши сопутствующие вопросы минимизации размера среды выполнения, где полнофункциональная среда выполнения не нужна, как для «Hello World». Сравнивая размер исполняемого файла с объемом памяти, установленным на вашей платформе, можно сделать вывод, что это преждевременная оптимизация. Но для простых исполняемых файлов, например. по встраиваемым микроконтроллерам конечно стоит спросить.

Однако есть еще один неявный вопрос:

Как мне отделить исполняемый файл от среды выполнения, обремененной лицензией GPL?

и я отвечу на это.

Исторически сложилось так, что Gnat RTS не всегда была так загромождена. Одно время в нем использовалась "Gnat Modified" GPL (GMGPL), в которой файлы среды выполнения содержит дополнительное разрешение сверх прав GPL, позволяя вам связать эти компоненты RTS с исполняемым файлом, не обременяя ваш исполняемый файл лицензией GPL, что фактически позволяет вам выпускать такой исполняемый файл под лицензией с закрытым исходным кодом. (При условии, что ни один из других его компонентов не является чистой GPL).

Компилятор Gnat GPL поставляется с чистой средой выполнения GPL (полностью легально), чтобы отличать его от коммерческих предложений от тех же авторов, которые имеют право ставить еду на свой стол, и их коммерческие продукты имеют отличную репутацию и первоклассную поддержку.

Однако существует еще одна вилка старого компилятора Gnat, предлагаемая FSF как часть основного GCC. в курсе современных разработок Ады, включая Ада-2012. В некоторых отношениях она опережает Gnat GPL — например, в базовой версии gcc, в то время как в некоторых отношениях она отстает, так как новые функции Ada требуют больше времени, чтобы попасть в ветку FSF. Но дело здесь в том, что он унаследовал лицензию GMGPL, а затем очень похожую «Исключение во время выполнения» в GPLv3. Ссылка «Обоснование и часто задаваемые вопросы» должна позволить вам определить, удовлетворяет ли это ваши потребности.

Если так. вы можете скомпилировать gcc (включая Gnat) из исходного кода, чтобы удовлетворить ваши потребности. Однако это не тривиальный проект! Таким образом, для большинства распространенных платформ вы можете найти готовые двоичные файлы компилятора FSF Gnat на сайте с творческим названием getadanow.com.

Отказ от ответственности: я только указываю на этот вариант. Как всегда в вопросах лицензирования, не верьте слову «случайный парень в Интернете», а изучите фактические лицензии компилятора и RTS, которые вы используете, и получите соответствующую юридическую консультацию.

person user_1818839    schedule 01.02.2016
comment
Вопросы лицензирования всегда являются основным источником разочарования. На странице часто задаваемых вопросов Adacore указано, что лицензия гарантирует, что исполняемые файлы, сгенерированные с помощью GNAT Pro, могут распространяться в соответствии с положениями и условиями для конкретных клиентов. и что для GNAT GPL не предоставляется никаких гарантий. Я склонен понимать это, поскольку GNAT подходит для создания исполняемых файлов с закрытым исходным кодом (как и gcc в целом), но вы делаете это на свой страх и риск. Другая проблема заключается в том, что как физическое лицо я все равно не могу принимать их коммерческие предложения (минимальный пакет — 5 годовых лицензий для компании). - person trbvm; 01.02.2016
comment
Вы правы, мой ответ должен был указать, что лицензирование Gnat Pro отличается в этом отношении, предоставляя необходимое вам разрешение. Я использую компилятор FSF, когда не могу использовать GPL для своего программного обеспечения. - person user_1818839; 01.02.2016
comment
GNAT GPL фактически требует, чтобы вы распространяли приложения с GPL, то есть с вашим исходным кодом. FSF GCC (который, как отмечает Брайан, имеет исключение GCC Runtime Library Exception) позволяет вам распространять ваши приложения на любых условиях, которые вы выберете. - person Simon Wright; 01.02.2016
comment
Используйте pragma License, чтобы обеспечить соответствие требованиям. - person trashgod; 02.02.2016