r20 - 31 Jul 2009 - 17:50:48 - Anton OrlovYou are here: TWiki >  Refaldevel Web > CppBackend > VisualCppBackendGuide

C++ Backend & Microsoft Visual C++

Эта страница рассказывает о том, как настроить компиляцию рефал-программ в С++ и дальше в исполняемые файлы с помощью Microsoft Visual C++.

Чтобы запускать рефал-программы таким образом, необходимо иметь рабочее окружение для компиляции С++-программ. Можно использовать Visual Studio (версии 7 и выше) или установить бесплатно раздаваемые версии компилятора (Visual C++) и библиотек (Platform SDK).

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

Конфигурация системы производится путём редактирования файла refal\с++\config.bat. Он снабжён подробными комментариями.

Настройка С++

Вариант 1: Visual Studio

Если на машине установлена Visual Studio версии 7 или выше, то можно использовать компилятор С++ и библиотеки, входящие в её состав.

Для этого в пункте -1- файла refal\с++\config-VS.bat необходимо вызвать скрипт vcvars32.bat, поставляемый с этой версией Visual Studio. Вызовы всех других скриптов в пункте -1- следует закомментировать или удалить.

Вариант 2: компилятор С++ и библиотеки, не входящие в Visual Studio

С сайта Microsoft можно свободно скачать Visual C++ 2008 Express Edition. Следуйте описанной там процедуре установки.

Получить минимально необходимую часть библиотек из Platform SDK можно следующим образом.

  1. Скачать инсталлятор, соответствующий вашей архитектуре, и запустить его.
  2. Выбрать "custom installation".
  3. Отменить установку всех компонент, кроме Configuration Options и Microsoft Windows Core SDK.
  4. Заказать установку Configuration Options.
  5. В Microsoft Windows Core SDK отменить всё, кроме Build Environment для вашей архитектуры.
  6. Запустить установку.

Для архитектуры x86 32-bit всего понадобится скачать чуть более 50 Mb и чуть более 90 Mb места на диске.

Если вы таким образом установили последние версии Visual C++ и Platform SDK, то конфигурация С++-окружения закончена.

Если же вы хотите использовать другую версию компилятора, то в пункте -1- файла refal\c++\config-VS.bat необходимо вызвать vcvars32.bat, поставляемый с той версией компилятора.

Проверить, что окружение сконфигурировано правильно, можно запустив командный шелл (cmd), вызвав в нём refal\с++\config-VS.bat, и выполнив команду cl. В результате компилятор С++ должен вывести информацию о своей версии.

Опции компиляции рефал-программ

В файле refal\с++\config-VS.bat в любой момент можно изменить опции компилятора Рефала (RFLAGS), компилятора C++ (CFLAGS) и линкера (LFLAGS), которые используются при компиляции рефал-программ с помощью скрипта rfp.bat.

ALERT! Обратите внимание на опции оптимизации С++ кода в пункте -3-. На слабых машинах компиляция полученного из Рефала кода с опцией /O2, изначально указанной в refal\с++\config-VS.bat, может занимать очень много времени.

Для программ, использующих глубокую рекурсию, возможно, необходимо увеличить размер стека (см. Frequently Asked Questions). Это можно сделать с помощью опции /STACK для линкера в пункте -4- файла refal\с++\config-VS.bat.

Порядок работы

Для быстрого получения исполняемых файлов из рефал-программ, можно использовать скрипт refal\с++\rfp.bat. По функциональности он аналогичен скрипту rfp.sh. Отличия состоят в следующем:

  • не воспринимаются файлы вида *.rfi
  • не воспринимаются никакие опции
  • на работу скрипта влияют значения переменных окружения, указанные в файле refal\с++\config.bat

Если необходимо поменять опции компиляции, не редактируя файл refal\с++\config-VS.bat, то рекомендуемая процедура следующая:

  1. Запустить командный шелл (cmd).
  2. В нём запустить refal\с++\config-VS.bat.
  3. Изменить значения нужных переменных (RFLAGS, CFLAGS, LFLAGS).
  4. Из этого же шелла запускать refal\с++\rfp.bat.

Сборка системы Refal+ из исходных кодов

После настройки С++-окружения, можно собрать рефал-компилятор и библиотеки рантайм-поддержки для рефал-программ из исходных кодов.

Для этого скачайте исходные коды проекта и запустите refal\c++\make-VS.bat.

Компилятор Рефал Плюс --> C++ (rfpc.exe) располагается в директории refal\c++\compiler.

Техническая информация для разработчиков R+

? На самом деле, kernel32.lib входит в Visual C++ Toolkit 2003. Что же, получается из всего Platform SDK нужны только хэдеры? А может их можно отдельно распространять?

Ответ: как выяснилось, для компиляции программ, получаемых из Рефала, необходимы библиотеки, не входящие в Visual C++ Toolkit. Линкер требует наличие библиотеки uuid.lib (не сообщая, что из неё нужно конкретно). Избавиться от этой зависимости не получается, включить этот файл в свой дистрибутив нельзя. Таким образом, каждому, кто хочет компилировать C++-программы, необходимо либо установить Visual Studio, либо хотя бы часть SDK.

Лицензиями Visual С++ и SDK вообще запрещено распространять любые стандартные библиотеки в любом виде, кроме как слинкованном с пользовательской программой. Поэтому включить Visual C++ и даже просто C Runtime Library в свой дистрибутив, видимо, нельзя.

-- Anton Orlov - 20 Feb 2006

ToDo

  1. Положить на TWiki рядом со снэпшотом CVS-репозитария:
    • zip с готовой документацией (pdf'ы);
    • zip с бинариком компилятора (а может и не нужно).
  2. Сделать два инсталлятора:
    • Устанавливающий всё необходимое через интернет (Refal брать с TWiki, Visual C++ с сайта Microsoft).
    • Имеющий всё необходимое в едином архиве (разобраться, легально ли запихивать в свой архив микрософтовский компилятор и библиотеки).

Требования к инсталляторам (в порядке убывания приоритетов):

  • Уметь устанавливать Рефал из под рядового пользователя.
  • Спрашивать, нужно ли устанавливать документацию, примеры, исходники компилятора (и надо ли получать из них бинарик, или просто скачать его).
  • Определять наличие компиляторов С++ на машине и предлагать либо выбрать, который из них должен использоваться по умолчанию для компиляции рефал-программ, либо установить новый компилятор.

-- Anton Orlov - 21 Mar 2005

Edit | WYSIWYG | Attach | Printable | Raw View | Backlinks: Web, All Webs | History: r20 < r19 < r18 < r17 < r16 | More topic actions
Refaldevel.VisualCppBackendGuide moved from Refaldevel.MakeVisualCppBackend on 05 Mar 2005 - 01:41 by OrloV - put it back
 
R+

This site is powered by the TWiki collaboration platformCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback