Исходный код FreeBASIC располагается на Sourceforge и поддерживается с
помощью системы контроля версий Git , который позволяет различные
разработчикам работать над исходным кодом единовременно. Для пользователей
предусмотрена возможность скачать исходный код , используя анонимный доступ
на чтение и скомпилировать его с помощью GNU средств разработки. и присваивание
Компиляция разрабатываемой версии не рекомендуется для большинства
пользователей. FreeBASIC все еще в активной разработке, и может получиться
так, что после каких-то исправлений вы не сможете построить работающую
версию. Отметим также, что все что описано ниже, может измениться в будущих
версиях FreeBASIC.
В Windows используется MinGW / MSYS для компиляции FreeBASIC. У
пользователей Linux, как правило, необходимые средства разработки уже
установлены в системе. Сборка на основе Cygwin может быть полезна для
пользователей Windows, желающих получить доступ к библиотекам Linux. Сборка
DOS обычно выполняется на Windows, с помощью DJGPP. Опытные пользователи
имеют возможность кросс-компиляции , но для этих целей необходимы нужные
инструменты и библиотеки, более того, эта возможность сильно не
тестировалась. и присваивание
Предыдущие сборки (для компиляции FB 0,23 и ранее)
Получение текущего исходного кода
Компиляция для DOS с помощью DJGPP на Win32
Компиляция на x86 GNU / Linux
Компиляция для x86 GNU / Linux на x86_64 GNU / Linux
Компиляция под Win32 с помощью TDM-GCC и MSYS
Компиляция под Win32 с помощью MinGW / MSYS, для
установки в MinGW каталог
Получение обновления исходного кода и
перекомпиляция
Отладка FB
Makefile команды
Makefile конфигурации (переменные для установки с
make командной строки или внутри config.mk)
Конфигурации исходного кода компилятора (FBCFLAGS)
Конфигурации исходного кода
rtlib и gfxlib2 (CFLAGS)
Известные проблемы и подводные камни
Предыдущие сборки (для компиляции FB 0.23 [версии
до даты 20 сентября 2011 включительно] и более поздних)
Получение текущего
исходного кода
Текущий исходник (FreeBASIC 0.24+ [версия после 20
сентября 2011]) можно получить из этих репозиториев Git:
- главный репозитарий Sourceforge:
Git clone URL: git://git.code.sf.net/p/fbc/code
Просмотр из браузера: http://sourceforge.net/p/fbc/code/
Git clone URL: https://github.com/freebasic/fbc.git
Просмотр из браузера: https://github.com/freebasic/fbc
Если вам нужна помощь с установкой или использованием Git, то
воспользуйтесь поиском в Интернете или посмотрите
Git
подсказки здесь.
(Типичное использование после установки: "git clone git://...")
Компиляция для DOS с помощью
DJGPP на Win32
- Версия DOS FreeBASIC обычно компилируется в системе Windows с
использованием DJGPP. Загрузите последний выпуск FreeBASIC-DOS
с: FreeBASIC's
сайта. Извлеките архив в
C:\FBDOS. Этот путь мы будем использовать для построения нового
компилятора FB.
- Пакеты DJGPP могут быть найдены на домашней странице DJGPP: DJGPP homepage. FreeBASIC
нуждается в djdev204.zip из DJGPP 2.04 (DJGPP загружаемый каталог: beta/v2/),
но по идее, должно нормально использоваться и DJGPP 2.03 (DJGPP загружаемый
каталог: current/v2gnu/).
Установите DJGPP, извлекая все в C:\DJGPP.
Далее добавьте переменную окружения под названием "DJGPP", установив ее значение C:\DJGPP\djgpp.env.
- binutils (bnu*b.zip, bnu*a.zip)
- bash (bsh*.zip)
- djdev (djdev*.zip) - подобрать djdev204.zip или
поздний из каталога beta/
- fileutils (fil*.zip)
- gcc (gcc*b.zip)
- gpp (gpp*b.zip)
- make (mak*b.zip)
- shellutils (shl*b.zip)
- textutils (txt*b.zip)
Запись ниже может
оказаться полезной (особенно работая параллельно с MinGW),
при использовании сценария пакетной обработки, при запуске
терминала с инструментами DJGPP. Таким образом определяется
переменная окружения PATH, вместо того, чтобы изменять
глобальную переменную окружения PATH системы:
set DJGPP=C:\DJGPP\djgpp.env
set PATH=C:\DJGPP\bin;%PATH%
set PATH=C:\FBDOS;%PATH%
cd C:\
cmd
- Установив DJGPP и открыв командную строку, нужно
перейти в каталог C:\DJGPP\bin . Далее gcc должна при
команде gcc --version отобразить
информацию:
> gcc --version
gcc.exe (GCC) 4.7.1
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- Традиционная установка FB-dos является автономной,
поэтому мы будем использовать ENABLE_STANDALONE для
построения.
Если предположить, что FreeBASIC
исходники лежат в
C:\fbc-dos, создаем
C:\fbc-dos\config.mk
файл, содержащий примерно следующее:
ENABLE_STANDALONE := YesPlease
- Затем запустите "make" из cmd.exe для компилирования FB:
- Скопируйте эти файлы в C:\fbc-dos\bin\dos:
- C:\DJGPP\bin\{ar,as,ld}.exe
- Скопируйте эти файлы в C:\fbc-dos\lib\dos:
- C:\DJGPP\lib\{crt0,gcrt0}.o
- C:\DJGPP\lib\lib{emu,m}.a
- C:\DJGPP\lib\gcc\djgpp\version\lib{gcc,supcxx}.a, и переименуйте libsupcxx.a
в libsupcx.a (8-ми символьное имя файла)
- C:\FBDOS\lib\dos\libc.a - должен быть модифицирован из текущего FreeBASIC
релиза. Для использования libc из DJGPP, файл _main.o его содержащий, должен
быть заменён одним из компилированных из contrib/djgpp/libc/crt0/_main.c из
исходников FBC. Чтобы исправить баг в оригинальной версии от DJGPP.
- и любые дополнительные библиотеки, которые вы хотите использовать
- Переименовать C:\fbc-dos\fbc-new.exe в C:\fbc-dos\fbc.exe,
если хотите
- Построенный релиз FB может быть проверен прямо из исходного каталога, или
вы можете скопировать его в другое место. Убедитесь в том, чтобы
скопировались все следующие файлы и каталоги:
- fbc.exe
- bin/dos/
- inc/
- lib/dos/
Компилирование на x86 GNU/Linux
- Во-первых, нам нужен в работе новый компилятор FB. Загрузите последний
выпуск FreeBASIC-linux с FreeBASIC
сайта, затем извлеките его и установите:
$ tar zxf FreeBASIC-X.XX.X-linux.tar.gz
$ cd FreeBASIC-X.XX.X-linux
$ sudo ./install.sh -i
- Следующие DEB пакеты плюс зависимости необходимы (с
именами RPM в скобках):
- gcc
- g++ (gcc-c++)
- binutils
- make
- libncurses5-dev (ncurses-devel)
- libx11-dev (libX11-devel)
- libxext-dev (libXext-devel)
- libxpm-dev (libXpm-devel)
- libxrandr-dev (libXrandr-devel)
- libxrender-dev (libXrender-devel)
- libgpm-dev (gpm-devel)
- libgl1-mesa-dev, libglu1-mesa-dev (Mesa-devel) -
Файлы разработки OpenGL
- libffi-dev (ffi-devel) - сторонние интерфейсы функций
для Threadcall
- Традиционная сборка FB-Linux является нормальной установкой FB,
которая использует инструменты и библиотеки системы. Обычно
не нужно ничего менять внутри config.mk.
- Предполагая, что исходные коды FreeBASIC располагается в ~/fbc, запустите
"make" и это позволит скомпилировать FB:
- Опционально можно установить путь, определяемый
переменной prefix (по умолчанию /usr/local):
Компилирование для x86 GNU/Linux на x86_64 GNU/Linux
- В настоящее время FB поддерживает только 32 бита, и пока нет никакого
64-битного порта, но все же можно собрать 32-битный FB на
64-битной системе. Точно так же, как с 32bit GNU/Linux build,
нам нужен свежий компилятор FB. Загрузите последний выпуск
FreeBASIC-linux с FreeBASIC
сайта, извлеките и установите его:
$ tar zxf FreeBASIC-X.XX.X-linux.tar.gz
$ cd FreeBASIC-X.XX.X-linux
$ sudo ./install.sh -i
- Необходимы следующие DEB пакеты плюс зависимости:
- libc6-dev-i386
- binutils
- gcc-multilib
- g++-multilib
- lib32ncurses5-dev
- make
- libx11-dev - для X11 заголовков
- libxext-dev
- libxpm-dev
- libxrandr-dev
- libxrender-dev
- libgl1-mesa-dev - для OpenGL заголовков
- libglu1-mesa-dev
- libgpm-dev - для GPM заголовков
- ia32-libs-dev - для 32bit X11 и OpenGL библиотек на Debian
- lib32ffi-dev
- Если предположить, что FreeBASIC исходники находятся в ~/fbc,
создайте ~/fbc/config.mk файл со следующим
содержанием:
CC := gcc -m32
TARGET_ARCH := x86
Это укажет FB makefile использовать gcc -m32 вместо gcc, который вызовет
весь код C для сборки под x86, а не x86_64. Кроме того,
явная установка TARGET_ARCH к x86 необходима, чтобы
заставить makefile выбирать надлежащие модули x86 rtlib/gfxlib2,
поскольку в противном случае файл сборки будет опираться на
выходе на uname -m, который, оказывается для x86_64. Но так
как мы хотим собрать 32 битную сборку, мы должны отвергнуть
это.
- Запустите "make" для компиляции FB:
- Опционально можно установить путь, определяемый
переменной prefix (по умолчанию /usr/local):
Компиляция на Win32 используя
TDM-GCC и MSYS
- Для работы нам нужно установить новый FB-win32 компилятор. Загрузите
последний выпуск FreeBASIC-win32 с FreeBASIC
сайта распакуйте/установите его в C:\FB-win32.
- Версия Win32 FreeBASIC как правило собирается на Win32, используя TDM-GCC
(SJLJ - setjump/longjump способ обработки исключений). Скачайте инсталлятор
TDM-GCC по ссылке http://tdm-gcc.tdragon.net/download и установите рекомендуемые
TDM-GCC C и C++ пакеты в C:\TDM-GCC.
- Необходимые пакеты MSYS можно скачать и распаковать с последней версией mingw-get program.
Это может быть извлечено в тот же самый каталог TDM-GCC; тогда установка MSYS
файлов оказалась бы в C:\TDM-GCC\msys\1.0 и пока Вы не используете его для
установочных пакетов MinGW, не должно быть никакого конфликта с файлами TDM-GCC.
- После установки MSYS, вы можете запустить MSYS bash C:\TDM-GCC\msys\1.0\msys.bat.
Вы должны удостовериться, что FB makefile найдет fbc и gcc
программы; Как правило это делается указанием путей
C:\TDM-GCC\bin и C:\FB-win32 в системных переменных. Чтобы не
изменять PATH для всей системы, вы можете использовать .bat
скрипт при открытии MSYS bash . Это необходимо делать каждый раз
при открытии bash:
set PATH=%PATH%;C:\TDM-GCC\bin
set PATH=%PATH%;C:\FB-win32
C:\TDM-GCC\msys\1.0\msys.bat
- Исходный код rtlib дополнительно зависит от libffi
заголовков (ffi.h и ffitarget.h) должны
быть доступны в C:\TDM-GCC\include. Кроме того,
библиотека libffi.a будет необходима позже при
компиляции программ FB, которые используют Threadcall.
Собранная версия libffi доступна из fbc
области загрузок.
- Для того, чтобы скомпилировать FreeBASIC's gfxlib2, DirectX заголовки нужны
в C:\TDM-GCC\include, конкретно ddraw.h и dinput.h.
Вы можете получить заголовки отсюда: http://alleg.sourceforge.net/files/dx80_mgw.zip
- Традиционная установка FB-win32 является автономной , таким образом мы
будем использовать ENABLE_STANDALONE для нового построения.
Если предположить, что FreeBASIC
исходники находятся в
C:\fbc, создайте файл
C:\fbc\config.mk
, содержащий примерно следующее:
# FB-win32 typically is built as standalone
ENABLE_STANDALONE := YesPlease
# For TDM-GCC which doesn't have libgcc_eh, unlike MinGW.org
FBCFLAGS := -d ENABLE_TDMGCC
- Запустите "make" (из MSYS bash) и скомпилируйте FB:
- Копируйте в C:\fbc\bin\win32:
- C:\TDM-GCC\bin\{ar,as,dlltool,ld}.exe
- GoRC.exe (из http://www.godevtool.com/ или предыдущих версий FreeBASIC)
- Копируйте в C:\fbc\lib\win32:
- C:\TDM-GCC\lib\{crt2,dllcrt2,gcrt2}.o
- C:\TDM-GCC\lib\lib{gmon,mingw32,mingwex,moldname}.a
- C:\TDM-GCC\lib\gcc\mingw32\version\{crtbegin,crtend}.o
- C:\TDM-GCC\lib\gcc\mingw32\version\lib{gcc,supc++}.a
- C:\TDM-GCC\lib\lib{advapi32,gdi32,kernel32,msvcrt,user32,winmm,winspool}.a
(переименуйте в lib*.dll.a)
- C:\TDM-GCC\lib\libffi.a
- и любые дополнительные библиотеки, которые вы хотите использовать
- Переименуйте файл C:\fbc\fbc-new.exe в C:\fbc\fbc.exe,
если желаете
- Новый построенная сборка FB может быть проверена прямо из исходного
каталога, или вы можете скопировать его в другое место. Убедитесь в том, чтобы
скопировались все следующие файлы и каталоги:
- fbc.exe
- bin/win32/
- inc/
- lib/win32/
Компиляция на Win32 используя MinGW/MSYS,
для инсталляции в каталог MinGW и присваивание
- Для работы нам нужно установить новый FB-win32 компилятор. Загрузите
последний выпуск FreeBASIC-win32 с FreeBASIC
сайта распакуйте/установите его в C:\FB-win32. и присваивание
- Установите MinGW/MSYS, загрузив текущую
версию mingw-get program
и распакуйте в C:\MinGW. После этого откройте командную строку
(cmd.exe) и запустите: и присваивание
> C:\MinGW\bin\mingw-get.exe update
> C:\MinGW\bin\mingw-get.exe install
Следующие пакеты должны быть установлены с помощью
mingw-get install (или
загрузите и установите вручную):
- После установки MSYS, вы можете запустить MSYS bash
C:\MinGW\msys\1.0\msys.bat. Вы должны
удостовериться, что FB makefile найдет fbc и
gcc программы; Как правило это делается
указанием путей C:\MinGW\bin и C:\FB-win32 в
системных переменных. Чтобы не изменять PATH
для всей системы, вы можете использовать
.bat скрипт при открытии MSYS bash . Это
необходимо делать каждый раз при открытии
bash:
set PATH=%PATH%;C:\MinGW\bin
set PATH=C:\FB-win32;%PATH%
C:\MinGW\msys\1.0\msys.bat
Также возможно использовать программы MinGW/MSYS из cmd.exe командной
строки, если желаете. Для этого нужно добавить C:\MinGW\bin,
C:\MinGW\msys\1.0\bin и C:\FB-win32 в глобальную переменную
окружения системы PATH .
- Исходный код rtlib дополнительно зависит от libffi
заголовков (ffi.h и ffitarget.h) должны
быть доступны в C:\MinGW\include. Кроме того,
библиотека libffi.a будет необходима позже при
компиляции программ FB, которые используют Threadcall.
Собранная версия libffi доступна из fbc
области загрузок.
- Для того, чтобы скомпилировать FreeBASIC's gfxlib2, DirectX заголовки нужны
в C:\MinGW\include, конкретно ddraw.h и dinput.h.
Вы можете получить заголовки отсюда: http://alleg.sourceforge.net/files/dx80_mgw.zip
- Этот fbc построится для MinGW, будет сборка normal, с той же самой
структурой каталогов как на Linux. Обычно нет необходимости изменять config.mk,
кроме может быть установки префикса. Если предположить, что исходники FreeBASIC расположены в C:\fbc, создайте файл
C:\fbc\config.mk , содержащий примерно следующее:
- Запустите "make" (из MSYS bash) и скомпилируйте FB:
- Опционально можно установить путь, определяемый
переменной prefix:
Получение
обновления исходного кода и перекомпиляция
Для загрузки обновлений, доступной в репозитории Git fbc,
Вы можете использовать
pull, либо,
используйте ваш любимый графический инструмент Git или в
терминале:
Чтобы посмотреть на входящие изменения до их применения, сделайте
следующее:
# Обновление удаленных филиалов
git fetch
# Смотрим
gitk --all
# Все выглядит нормально? Тогда объединить удаленный филиал с текущей веткой, применить обновление.
git merge origin/master
Перекомпиляция, большая часть времени, так же легко:
Если опция компиляции (ENABLE_STANDALONE) использовалась для
предыдущей сборки, необходимо определить ее снова, если она
конечно не установлена в config.mk. и присваивание
и присваивание
Как специальное исключение, для DOS построение надо запускать с
чистого листа, чтобы должным образом восстановить FB после того,
как исходные модули были переименованы или удалены. Причина
этого состоит в том, что под DOS/DJGPP makefile использует *.o
групповые символы, чтобы связать fbc и заархивировать libfb.a и
т.д., вместо того, чтобы передать явные .o имена файла из-за
ограничения длины командной строки. Если сборку делать не с
чистого листа, то могут использоваться старые оставшиеся файлы
объектов от предыдущего построения.
Отладка FB
Для отладки и развития - хорошая идея построить
компилятор с -g и -exx опциями, чтобы позволить выводить
предупреждения для проверки нулевых указателей и границ
массивов. Для rtlib/gfxlib2 кода -DDEBUG включает
предупреждения. Просто обновите config.mk, и перекомпилируйте.
Пример настроек config.mk:
FBFLAGS := -g -exx
CFLAGS := -g -O0 -DDEBUG
Запуск FBC под GDB обычно выглядит примерно так:
gdb --args fbc test.bas
Также обратите внимание на то, что fbc может быть проверен прямо из
каталога построения, не будучи "установленным" где-то в другом
месте. Это также является большой помощью в отладке.
Makefile команды
По умолчанию строится все,
что должно быть построено
Используется для построения
только конкретного компонента. Например, это может быть
использовано при построении rtlib для определенной
цели. Для того, чтобы иметь возможность кросс-компиляции
программ FB (например, compiler) для этой
цели.
Используется для удаления
построенных файлов. make clean удаляет все
встроенные файлы, в то время как, например, make clean-compiler
удаляет только файлы, созданные для компилятора, позволяя
компилятору делать быстрее перекомпилирование, без
необходимости восстанавливать весь код rtlib/gfxlib2.
- install[-component], uninstall[-component]
Используется для копирования
встроенных файлов в каталог, указанный переменной prefix ,
или удаления их оттуда. Это особенно полезно для установки normal
сборки в /usr/local на Linux/BSD системах. Для сборки standalone, make install
также будет работать для копирования или удаления файлов.
Тем не менее, сборка standalone использует несовместимое
расположение каталогов, и не должно быть установлено в /usr/local
или похожие каталоги из-за этого.
Обратите внимание, что очень неплохо, что есть возможность
запустить недавно построенный установку FB прямо из
каталога, в котором он был составлен; make install
не нужен при работе с make (если
префиксный путь не был жестко закодирован в компилятор через
ENABLE_PREFIX)
Кроме того, существуют install-includes и uninstall-includes
команды, которые копируют/удаляют только файлы заголовков
FB. Обратите внимание, что нет make includes или
аналогичной команды, для того, чтобы включаемые файлы не
включались для построения.
Makefile конфигурации (переменные
для установки с make командной строки или внутри config.mk)
- FBFLAGS, FBCFLAGS, FBLFLAGS
Дополнительные флаги fbc
,могут использоваться при компиляции и/или линковке
компилятора
Дополнительные флаги GCC,
которые могут использоваться при составлении rtlib и gfxlib2
Изменяет /usr/local префикс к
чему-то еще. Примечание: MSYS карты /usr/local к C:\msys\1.0\local.
Это используется только...
- с makefile's install и uninstall
командами,
- в компиляторе (жестко закодировано) если ENABLE_PREFIX был использован
Обратите внимание,
что в сочетании с bash на Win32 (например с DJGPP или MSYS)
необходимо использовать прямую косую черту вместо обратной
косой черты в пути к каталогам, для примера: prefix=C:/MinGW
Эта переменная может быть
установлена в системе триплет, для кросс-компиляции с
использованием GCC кросс-компиляторного инструментария.
Makefile будет использовать
fbc -target $(TARGET)вместо
fbc,
и
$(TARGET)-gcc вместо
gcc.
Для примера, на Debian GNU/Linux системе с i686-w64-mingw32 GCC
установленным крест-компилятором, вы можете построить win32
rtlib вроде этого:
# Построение win32 rtlib/gfxlib2
make rtlib gfxlib2 TARGET=i686-w64-mingw32
# Инсталляция в /usr/local/lib/i686-w64-mingw32-freebasic
make install-rtlib install-gfxlib2 TARGET=i686-w64-mingw32
Он будет дополнять существующую установку FBC в /usr/local, как плагин, и
с этого момента вы можете использовать кросс-компиляцию FB
программ для Win32:
fbc -target i686-w64-mingw32 ...
Эти переменные указывают fbc, gcc
и ar программы, используемые в процессе сборки. Вы можете
задать их, чтобы переопределить значения по умолчанию,
например:
- make FBC=~/FreeBASIC-0.23.0-linux/fbc
- make CC="gcc -m32"
FBC влияет compiler
только на исходный код, в то время как CC и AR
используются для rtlib и gfxlib2.
V для подробного режима. По
умолчанию make-файл не выводит на экран полные командные
строки, используемые во время компиляции, но просто
распечатывает последний инструмент и комбинацию имени файла,
чтобы дать лучшую визуальную индикацию относительно
прогресса сборки. Это также помогает выводить
предупреждения, и ошибки в консоли. Если переменная V
установлена, echoing tricks отключены, и полные командные
строки будут показаны, поскольку GNU make это обычно делает.
Построение standalone FB
вместо
normal конфигурации
Unix-стиля, см. также:
standalone vs. normal
сравнение. Это приводит к тому что makefile использует
каталоги standalone и использует
-d ENABLE_STANDALONE
при построении компилятора.
Это приводит к тому что makefile
использует -d ENABLE_PREFIX=$(prefix)когда
собирается компилятор.
Это приводит к тому что makefile
использует -d ENABLE_SUFFIX=$(ENABLE_SUFFIX) когда
собирается компилятор, и добавляет данную суффиксную строку
к fbc исполнимой программе и к имени lib/ каталогов.
Для примера, используя ENABLE_PREFIX=-0.24 даст вам fbc-0.24.exe
и lib/freebasic-0.24/ каталог, вместо fbc.exe и lib/freebasic/.
Это позволяет устанавливать несколько версий компилятора и
сред выполнения параллельно. Примечание: имя каталога
include/ не влияет, и FB заголовки всегда совместно
используются всеми установленными версиями FB (заголовки FB,
и их каталоги разработаны, чтобы быть в состоянии сделать
это). Это только поддерживается для Normal (не standalone)
сборки.
Конфигурации исходного кода
компилятора (FBCFLAGS)
Это заставляет компилятор
вести себя как standalone инструмент, который не может
полагаться на систему, с определенными программами или
библиотеками. Смотрите
normal vs. standalone
сравнение для получения дополнительной информации.
Это заставляет компилятор
работать с библиотеками TDM-GCC вместо библиотек MinGW.org.
В настоящее время единственная разница в том, что под
MinGW.org, компилятор должен соединиться в libgcc_eh, чтобы
удовлетворить зависимости, в то время как этого нет под
TDM-GCC, у которого даже нет этой библиотеки. Различие
вызвано механизмами обработки исключений, которые toolchains
сконфигурированы, чтобы использовать: TDM-GCC с SJLJ,
MinGW.org с DW2.
Это заставляет компилятор
добавить данный суффикс к имени каталога lib/freebasic/ при
поиске его собственного lib/freebasic/каталога. Например,-d
ENABLE_SUFFIX =-0.24 укажет искать lib/freebasic-0.24/
вместо lib/freebasic/. Это только поддерживается для Normal
(не Standalone) сборки.
- -d ENABLE_PREFIX=/some/path
Это создает данный префикс
пути жестко закодированным в компилятор. Это больше не будет
использовать exepath() и не будет перемещаемым. Это может
быть полезно только, если его известно, что компилятор не
будет перемещаемым, или если ExePath () не работает.
rtlib and gfxlib2 source code configuration (CFLAGS)
При этом, Unix rtlib/gfxlib2
не будет использовать X11 заголовки, отключив gfxlib2's X11
графический драйвер и некоторые rtlib's Linux консольные
функциональности (влияет на multikey() и обращение к мыши в
консоли)
При этом, Linux rtlib не
будет использовать General Purpose Mouse headers (gpm.h),
отключив Linux
GetMouse
функциональность.
При этом, rtlib не будет
использовать libffi заголовки (ffi.h), отключив
Threadcall
функциональность.
При этом, gfxlib2 не будет
использовать заголовки OpenGL, отключив графические драйверы
OpenGL.
Known problems and pitfalls
Win32 rtlib compilation error: _controlfp, _PC_64 undeclared
CC src/rtlib/obj/hinit.o
src/rtlib/win32/hinit.c: In function 'fb_hInit':
src/rtlib/win32/hinit.c:21:5: warning: implicit declaration of function '_controlfp' [-Wimplicit-function-declaration]
src/rtlib/win32/hinit.c:21:17: error: '_PC_64' undeclared (first use in this function)
Оба MinGW runtime и MinGW GCC имеют
float.h заголовок,
а в некоторых установках GCC только один. Эта проблема
обнаруживается с некоторыми установками MinGW, например
gcc-core-4.6.1 + mingwrt-3.20. В то время как, например,
gcc-core-4.5.2 + mingwrt-3.18 (предыдущая установка, сделанная
с, mingw-get) хорошо работает. Эта проблема также обнаруживается
с mingw32 кросс-компилятором на Debian (gcc 4.4.4, mingwrt
3.13).
Самое простое временное решение: Добавить
#include_next <float.h>
в
C:\MinGW\lib\gcc\mingw32\version\include\float.h
См. также:
- Комментарии в верхней части C:\MinGW\include\float.h
- MinGW GCC 4.6.1 bug report
- MinGW patch tracker, 2010
- http://lists.nongnu.org/archive/html/mingw-cross-env-list/2010-06/msg00038.html
- http://gcc.gnu.org/ml/gcc-patches/2010-01/msg01034.html
- https://sourceforge.net/mailarchive/message.php?msg_id=28122574
MinGW binutils ld версии с 2.18 по 2.21
fbc вызывает ошибку (ld/12614) в упомянутых линкерных
версиях, заставляя его производить сломанные файлы. Это
исправлено в binutils 2.21.1 и выше.
-lXpm
not found on Debian x86_64
Пакет ia32-libs-dev (для примера на Debian 6)
почему-то не содержит /usr/lib32/libXpm.so символическую ссылку,
хотя он содержит ссылки, для других библиотек X11. Это,
видимо, может быть решено путем создания символической ссылки
вручную:
ln -s /usr/lib32/libXpm.so.4 /usr/lib32/libXpm.so