Получение исходного кода FreeBASIC и его компиляция
 

Исходный код 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/
    • Github зеркало:
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:
> cd C:\fbc-dos
> make
  • Скопируйте эти файлы в 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:
$ cd ~/fbc
$ make
  • Опционально можно установить путь, определяемый переменной prefix  (по умолчанию /usr/local):
$ make install

Компилирование для 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:
$ cd ~/fbc
$ make
  • Опционально можно установить путь, определяемый переменной prefix  (по умолчанию /usr/local):
$ make install

Компиляция на 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:
$ cd /c/fbc
$ make
  • Копируйте в 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 , содержащий примерно следующее:

prefix := C:/MinGW
  • Запустите "make" (из MSYS bash) и скомпилируйте FB:
$ cd /c/fbc
$ make
  • Опционально можно установить путь, определяемый переменной prefix:
$ make install

Получение обновления исходного кода и перекомпиляция

Для загрузки обновлений, доступной в репозитории Git fbc, Вы можете использовать pull, либо, используйте ваш любимый графический инструмент Git или в терминале:

git pull
Чтобы посмотреть на входящие изменения до их применения, сделайте следующее:

# Обновление удаленных филиалов
git fetch

# Смотрим
gitk --all

# Все выглядит нормально? Тогда объединить удаленный филиал с текущей веткой, применить обновление.
git merge origin/master
Перекомпиляция, большая часть времени, так же легко:
make
Если опция компиляции (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 команды

  • нет или all
По умолчанию строится все, что должно быть построено
  • compiler, rtlib, gfxlib2
Используется для построения только конкретного компонента. Например, это может быть использовано при построении rtlib для определенной цели. Для того, чтобы иметь возможность кросс-компиляции программ FB  (например, compiler) для этой цели.
  • clean[-component]
Используется для удаления построенных файлов. 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 ,могут использоваться при компиляции и/или линковке компилятора
  • CFLAGS
Дополнительные флаги GCC, которые могут использоваться при составлении rtlib и gfxlib2
  • prefix
Изменяет /usr/local префикс к чему-то еще. Примечание: MSYS карты /usr/local к C:\msys\1.0\local.

Это используется только...
      • с makefile's install и uninstall командами,
      • в компиляторе (жестко закодировано) если ENABLE_PREFIX был использован
Обратите внимание, что в сочетании с bash на Win32 (например с DJGPP или MSYS) необходимо использовать прямую косую черту вместо обратной косой черты в пути к каталогам, для примера: prefix=C:/MinGW
  • TARGET
Эта переменная может быть установлена в системе триплет, для кросс-компиляции с использованием 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, CC, AR
Эти переменные указывают fbc, gcc и ar программы, используемые в процессе сборки. Вы можете задать их, чтобы переопределить значения по умолчанию, например:

      • make FBC=~/FreeBASIC-0.23.0-linux/fbc
      • make CC="gcc -m32"
FBC влияет compiler только на исходный код, в то время как CC и AR используются для rtlib и gfxlib2.
  • V
V для подробного режима. По умолчанию make-файл не выводит на экран полные командные строки, используемые во время компиляции, но просто распечатывает последний инструмент и комбинацию имени файла, чтобы дать лучшую визуальную индикацию относительно прогресса сборки. Это также помогает выводить предупреждения, и ошибки в консоли. Если переменная V установлена, echoing tricks отключены, и полные командные строки будут показаны, поскольку GNU make это обычно делает.
  • ENABLE_STANDALONE=1
Построение standalone FB вместо normal конфигурации Unix-стиля, см. также: standalone vs. normal сравнение. Это приводит к тому что makefile использует каталоги standalone и использует -d ENABLE_STANDALONE при построении компилятора.
  • ENABLE_PREFIX=1
Это приводит к тому что makefile использует -d ENABLE_PREFIX=$(prefix)когда собирается компилятор.
  • ENABLE_SUFFIX=foo
Это приводит к тому что 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)

  • -d ENABLE_STANDALONE
Это заставляет компилятор вести себя как standalone инструмент, который не может полагаться на систему, с определенными программами или библиотеками. Смотрите normal vs. standalone сравнение для получения дополнительной информации.
  • -d ENABLE_TDMGCC
Это заставляет компилятор работать с библиотеками TDM-GCC вместо библиотек MinGW.org. В настоящее время единственная разница в том, что под MinGW.org, компилятор должен соединиться в libgcc_eh, чтобы удовлетворить зависимости, в то время как этого нет под TDM-GCC, у которого даже нет этой библиотеки. Различие вызвано механизмами обработки исключений, которые toolchains сконфигурированы, чтобы использовать: TDM-GCC с SJLJ, MinGW.org с DW2.
  • -d ENABLE_SUFFIX=foo
Это заставляет компилятор добавить данный суффикс к имени каталога 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)

  • -DDISABLE_X11
При этом, Unix rtlib/gfxlib2 не будет использовать X11 заголовки, отключив gfxlib2's X11 графический драйвер и некоторые rtlib's Linux консольные функциональности (влияет на multikey() и обращение к мыши в консоли)
  • -DDISABLE_GPM
При этом, Linux rtlib не будет использовать General Purpose Mouse headers (gpm.h), отключив Linux GetMouse функциональность.
  • -DDISABLE_FFI
При этом, rtlib не будет использовать libffi заголовки (ffi.h), отключив Threadcall функциональность.
  • -DDISABLE_OPENGL
При этом, 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