FB и кросс-компиляция
 

Каждый FBC поддерживает все цели

Начиная с версии fbc 0,24 , FreeBASIC компилятор всегда поддерживает все цели компиляции. Больше нет никакой конфигурации, необходимой, чтобы позволить поддержку дополнительных целей в fbc время компиляции, как это раньше существовало в более старых fbc версиях. Это означает, вам только нужно установить один fbc на хост-системе, и он может использоваться для компиляции нативной программы также как для не нативной программы.

  • по умолчанию: компилировать для родной системы
  • -target и -arch параметры компилятора позволяют кросс-компиляцию

Требования для кросс-компиляции

Официальные пакеты выпуска FB включают fbc, способный выполнить кросс-компиляцию, но одного только fbc не достаточно.

1. Кроме fbc, FreeBASIC состоит из библиотеки FB выполнения (rtlib / libfb) и FB графической библиотеки (gfxlib2/libfbgfx). Кроме того, FreeBASIC использует библиотеки из MinGW, DJGPP или Linux GCC набора инструментов. Все эти библиотеки прекомпилированы для определенной цели. Вам нужна копия соответствующих библиотек для каждого цели компиляции, которую вы хотите использовать.

2. FreeBASIC использует ассемблер и линкер (а иногда и больше инструментов) от BinUtils проекта GNU для создания исполняемых файлов, и они поддерживают только одну цель одновременно. Вам нужны правильные бинарные файлы для каждой цели компиляции, которую вы хотите использовать.

Чтобы сохранить официальные пакеты FB небольшими по размеру, данные релизы включают только библиотеки и инструменты, необходимые для разработки на текущей платформе, но не для кросс-компиляции.

Пример: Кросс-компиляции из Ubuntu GNU/Linux для Win32

Ubuntu предлагает официальные MinGW пакеты кросс-компиляции, которые мы можем также использовать для FreeBASIC. Ниже описываются действия, необходимые для их установки.

1. gcc/binutils инструментарий кросс-компилятора

Установить пакет gcc-mingw-w64 и его зависимости. Точное имя пакета может быть разным для различных версий Ubuntu. Это должно дать вам инструментарий кросс-компилятора GCC для цели Win32 (и Win64 -- вы можете установить нужные пакеты вручную, если вы предпочитаете избежать установки всего gcc-mingw-w64 и всех его зависимостей.).

Это включает в себя binutils и MinGW библиотеки; и то и другое нужно fbc для кросс компиляции. Это также включает в себя gcc кросс-компиляции, который fbc использует для поиска места установки библиотек MinGW. Кроме того, gcc очевидно также необходим, если вы хотите использовать -gen gcc (например, при ориентации 64 бит, которое в настоящее время поддерживается только через -gen gcc).

Установленные средства называются i686-w64-mingw32-as (MinGW кросс-ассемблер), i686-w64-mingw32-ld (MinGW кросс-линкер), i686-w64-mingw32-gcc (MinGW кросс-gcc), и т.д. Вы можете использовать их с FBC, указав общий префикс цели для FBC с помощью опции -target:

fbc foo.bas -target i686-w64-mingw32

Это укажет FBC кросс-компиляцию с системными i686-w64-mingw32 gcc/binutils инструментарием и библиотеками.

2. Win32 FB библиотеки

Установите Win32 FB библиотеки, чтобы FBC смог найти их. Для примера выше -target i686-w64-mingw32, каталог, в котором должны быть библиотеки Win32 FB /usr/local/lib/freebasic/i686-w64-mingw32/, предполагая, что fbc установлен в /usr/local/bin/fbc. У вас есть два варианта, чтобы получить их.

a) Скопируйте библиотеки из официального пакета Win32 FB (или из некоторых других существующих сборок Win32 FB). Создайте каталог /usr/local/lib/freebasic/i686-w64-mingw32/ и скопируйте библиотеки в него. Это должно быть безопасно, пока библиотеки Win32 FB от той же самой версии FB как и у установки FB-linux. Однако, если библиотеки Win32 были созданы с набором инструментов MinGW , который несовместим с Ubuntu, тогда могут быть ошибки.

b) Соберите библиотеки Win32 FB вручную, используя набор инструментов UBUNTU. Если у вас есть исходный код FB fbc/, вы можете сделать:
cd fbc
make rtlib gfxlib2 TARGET=i686-w64-mingw32
sudo make install-rtlib install-gfxlib2 TARGET=i686-w64-mingw32
Это должно выполнить кросс-компиляцию библиотек Win32 FB, с помощью набора инструментов i686-w64-mingw32 и установить их в соответствующий каталог в /usr/local. Опять же здесь важно убедиться, что используется исходный код, который соответствует версии установки FB-linux.

Чтобы все было шикарно и не было несовместимостей версий FB, можно построить всю FB установку из источников, включая кросс-компиляцию библиотек Win32:

cd fbc
make
make rtlib gfxlib2 TARGET=i686-w64-mingw32
sudo make install
sudo make install-rtlib install-gfxlib2 TARGET=i686-w64-mingw32