FB and cross-compiling
 

每个fbc支持所有目标

由于fbc版本为0.24,FreeBASIC编译器始终支持所有编译目标。在fbc编译时不再需要配置其他目标的配置,就像以前存在于旧的fbc版本一样。这意味着您只需要为每个主机系统安装一个fbc,并且可以用于编译本机程序以及非本地程序。

  • default:为本机系统编译
  • -目标-拱编译器选项允许交叉编译

交叉编译要求

官方的FB发行包包括一个能够交叉编译的fbc,但是单独的fbc是不够的。

1.除了fbc,FreeBASIC还包括FB运行库(rtlib / libfb)和FB图形库(gfxlib2 / libfbgfx)。此外,FreeBASIC使用MinGW,DJGPP或Linux GCC工具链中的库。所有这些库都是针对某个目标进行预编译的。您需要每个要使用的编译目标的正确库的副本。

2.FreeBASIC使用GNU binutils项目中的汇编器和链接器(有时甚至更多的工具)创建二进制文件,并且这些可能一次只能支持一个目标。根据它们的构建方式,它们还可以支持多个目标。无论哪种方式,您需要为每个您要使用的编译目标使用适当的binutils。

为了保持官方的FB发行版本小,它们只包含本地开发所需的库和工具,但不包括交叉编译。

示例:从Ubuntu GNU / Linux到Win32的交叉编译

Ubuntu提供官方MinGW交叉编译软件包,我们也可以使用FreeBASIC。以下描述了设置此步骤所需的步骤。

1.gcc / binutils交叉编译工具链

安装gcc-mingw-w64包及其依赖项。Ubuntu的不同版本的确切包名称可能不同。这应该为您提供用于定位Win32(和Win64)的gcc交叉编译器工具链 - 如果您希望避免安装整个gcc-mingw-w64及其所有依赖项,您可以手动安装确切的包。

这包括binutils和MinGW库,这两者都是fbc绝对需要交叉编译的。它还包括交叉编译gcc,fbc用于查找MinGW库的安装位置。除此之外,如果要使用-gen gcc(例如当目标仅通过-gen gcc支持的64位目标)时,gcc显然也是必需的。

所安装的工具称为i686-w64-mingw32-as(MinGW交叉汇编器),i686-w64-mingw32-ld(MinGW交叉链接器),i686-w64-mingw32-gcc(MinGW cross gcc)等。您可以通过指定fbc -目标选项的通用目标前缀来将它们与fbc一起使用:

fbc foo.bas -target i686-w64-mingw32

这告诉fbc使用系统的i686-w64-mingw32gcc / binutils工具链和库进行交叉编译。

2.Win32 FB库

安装Win32 FB库,使fbc可以找到它们。对于上面的-target i686-w64-mingw32示例,假设fbc安装在/usr/local/bin/fbc,Win32 FB库所在的目录是/usr/local/lib/freebasic/i686-w64-mingw32/.你有两个选择来获得它们。

a)从官方的Win32 FB发行包(或其他现有的Win32版本的FB)复制库。创建/usr/local/lib/freebasic/i686-w64-mingw32/目录并将库复制到其中。这应该是安全的,只要Win32 FB库与您安装的FB-linux设置相同的FB版本。但是,如果使用与Ubuntu不兼容的MinGW工具链创建Win32库,那么可能会出现错误。

b)使用Ubuntu的工具链手动编译Win32 FB库。假设您有fbc/中的FB源代码,您可以执行以下操作:
cd fbc
make rtlib gfxlib2 TARGET=i686-w64-mingw32
sudo make install-rtlib install-gfxlib2 TARGET=i686-w64-mingw32
这应该使用i686-w64-mingw32工具链交叉编译Win32 FB库,并将其安装到/usr/local中的正确目录中。再次,在这里,确保所使用的源代码与已安装的FB-linux设置的版本相匹配是非常重要的。

要完全安全并避免FB版本不兼容,您可以从源代码(包括Win32交叉编译库)构建一个完整的FB设置:

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