EditWYSIWYGAttachPrintable
r2 - 14 Feb 2006 - 05:16:40 - OrloVYou are here: TWiki >  Refaldevel Web > 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; make
  3. Кое-какие тесты на корректность сборки можно выполнить с помощью
    make check
  4. Установить собранную библиотеку (по умолчанию в директорию /usr/local):
    make install
  5. Подробнее об установке 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]
  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