r4 - 20 Feb 2006 - 03:15:49 - OrloVYou are here: TWiki >  Refaldevel Web > CppBackend > UnixCppBackendGuide

Работа в Unix с использованием C++ в качестве выходного языка

Для того чтобы использовать Cpp Backend в Unix, кроме файлов проекта необходимо иметь компилятор C++. В качестве такового поддерживается g++, а также, возможно, Intel C++, однако в последнее время тестирования с ним не проводилось.

Работа с числами произвольной разрядности реализована через библиотеку GMP (http://swox.com/gmp/). Если она отсутствует, то вся арифметика в рефал-программах будет 32-разрядной. Поэтому библиотеку рекомендуется установить.

Установка GMP

  1. Скачать библиотеку с http://swox.com/gmp/#DOWNLOAD и разархивировать её.
  2. Для конфигурации библиотеки из основной директории выполнить:
    ./configure
    По умолчанию библиотека конфигурируется для установки в директорию /usr/local. Можно задать другую директорию с помощью опции --prefix:
    ./configure --prefix another_dir
  3. Для сборки библиотеки выполнить:
    make
  4. Кое-какие тесты на корректность сборки можно выполнить с помощью
    make check
  5. Установить собранную библиотеку:
    make install
  6. Подробнее об установке GMP: http://swox.com/gmp/manual/Installing-GMP.html#Installing%20GMP

Кроме описанного выше способа, можно (но менее предпочтительно) установить уже собранную версию библиотеки, поставляемую с дистрибутивом вашей системы. Помимо собственно скомпилированной библиотеки GMP, необходим заголовочный файл gmp.h. Следует иметь в виду, что в дистрибутиве вашей системы этот заголовочный файл может помещаться в другом пакете, нежели динамически подгружаемая версия библиотеки. Например, в Debian для 3-ей версии библиотеки GMP необходимо установить пакет libgmp3-dev.

Для установки системы необходима также утилита GNU Make.

Предустановочная конфигурация системы выполняется с помощью скрипта configure, имеющего несколько полезных опций, список которых выводится опцией -h. Наиболее важные параметры задаются следующим образом:

  • Директория, в которую будет установлена система, задаётся опцией -prefix. Исполняемые файлы будут помещены в поддиректорию bin этой директории, библиотеки -- в поддиректорию lib, а заголовочные файлы, необходимые для компиляции C++-программ, получаемых из рефал-программ -- в поддиректорию include. По умолчанию, система устанавливается в директорию /usr/local.

  • Компилятор C++ можно задать с помощью опции -cxx. По умолчанию, берётся значение переменной окружения $CXX, либо g++, если она не задана.

  • Если библиотека GMP и файл gmp.h находятся в нестандартных местах (если компилятор C++ не находит их), то пути к их директориям можно задать опциями -gmp_lib и -gmp_inc, соответственно.

  • Опции оптимизации для компилятора C++ можно задать с помощью -oflags. Для g++ можно варьировать её значение от -O0 до -O3. ALERT! Агрессивная оптимизация C++-кода, полученного из рефал-программ, требует значительных ресурсов. Дополнительные опции компилятору C++ можно передать с помощью -cflags.

Параметры, установленные с помощью configure, влияют как на компиляцию самой системы, так и на компиляцию рефал-программ при помощи скрипта rfp.sh после её установки. Опции, используемые в rfp.sh, вынесены для лёгкости изменения в начало скрипта.

Установка. Пошаговая инструкция.

  1. Перейти в основную директорию проекта refal.
  2. Запустить скрипт configure (указав дополнительные опции, при необходимости): ./configure [options]
    Если у вас нет права записи в /usr/local, то вы, вероятно, хотите задать хотя бы опцию -prefix .
  3. Выполнить: make
    В поддиректории bootstrap/compiler будет создан исполняемый файл компилятора Refal+ --> C++: rfpc.
  4. Выполнить: make install
    В директории, указанной при помощи configure, будут созданы файлы, необходимые для компиляции рефал-программ в C++ и далее в бинарный код. Основными инструментами пользователя являются скрипт rfp.sh и программа rfpc в поддиректории bin, о работе с которыми можно прочитать здесь: User Interface.
Edit | WYSIWYG | Attach | Printable | Raw View | Backlinks: Web, All Webs | History: r4 < r3 < r2 < r1 | More topic actions
 
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