fbc 使用的工具
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=CompilerTools
- 最后更新: 2016-11-07
FreeBASIC 编译器(fbc)在编译过程中可能调用的外部工具。
描述
FreeBASIC 除了 fbc 编译器本身之外,还使用多个工具来编译源代码。fbc 使用的确切工具及其调用方式取决于 fbc 的配置方式、宿主平台(fbc 运行的平台)、目标平台(生成的可执行文件将运行的平台)以及其他选项(如环境变量和命令行选项)。
FreeBASIC(fbc)可以以两种方式之一进行配置:独立(standalone)或带前缀(prefixed)。独立版本在可执行文件所在位置的相对目录中搜索文件。带前缀版本在编译器中硬编码了一个路径,指示在哪里查找额外的工具和库。有关配置 FreeBASIC 的更多信息,请参阅 FreeBASIC 源代码的 src/compiler 目录中的 INSTALL 文本文件。
可以通过使用 -version 命令行选项调用 fbc 来检查您安装的 fbc 版本是"standalone"还是"prefixed"。
独立模式(Standalone)
如果 fbc 被配置为"standalone",它将相对于 fbc 可执行文件所在位置搜索文件。fbc 位于目录树的"顶层",在其下方的子目录中搜索。"顶层"目录(默认为 fbc 可执行文件所在位置)可以用 -prefix 命令行选项覆盖。下面目录中显示的"topdir"表示 fbc 可执行文件所在的目录,或用 -prefix 命令行选项指定的目录(如果已给出)。"<target>"指由 -target 选项指定的同名目标平台。
非交叉编译时,fbc 在以下位置搜索:
/topdir/inc/topdir/lib/<target>/topdir/bin/<target>- 查询 gcc 以获取缺失的库(目前仅在 linux/freebsd 上)
交叉编译时,fbc 在以下位置搜索:
/topdir/inc/topdir/lib/<target>/topdir/bin/<target>- 不查询 gcc(只使用目标库目录)
带前缀模式(Prefixed)
如果 fbc 被配置为"prefixed",它将相对于配置的前缀(硬编码在 fbc 可执行文件中)搜索文件。下面目录中显示的"prefix"表示配置的前缀,或用 -prefix 命令行选项指定的目录(如果已给出)。"<target>"指由 -target 选项指定的同名目标平台。
非交叉编译时,fbc 在以下位置搜索:
/prefix/include/freebasic/prefix/lib/freebasic/<target>/prefix/bin/freebasic/<target>- 查询 gcc 以获取缺失的库(目前仅在 linux/freebsd 上)
交叉编译时,fbc 在以下位置搜索:
/prefix/include/freebasic/prefix/lib/freebasic/<target>/prefix/bin/freebasic/<target>- 不查询 gcc(只使用目标库目录)
GCC 查询
如果 fbc 无法定位某个文件,它可能会调用 gcc -print-file-name=<file> 来查询该文件的位置。以下是可能通过 gcc 定位的文件:
crt1.ocrtbegin.ocrtend.ocrti.ocrtn.ogcrt1.olibgcc.alibsupc++.alibc.so(仅 Linux)
查找二进制文件
fbc 将在编译和链接过程中调用额外的工具(二进制可执行文件)。以下是根据宿主平台、目标平台或要生成的可执行文件或库类型,fbc 可能调用的工具(可执行文件)列表:
asarldgccGoRCdlltoolpexportscxbe
fbc 将按以下方式搜索这些工具:
- 如果设置了环境变量(名称与工具相同,不含扩展名,全部大写),则明确指示要调用的可执行文件的路径和名称。
- 如果文件(或符号链接)存在于
prefix/bin/freebasic/<target>或独立版本的./bin/<target>中,则使用它。 - 在 Linux 上,如果在
prefix/bin/freebasic/<target>或独立版本的./bin/<target>中找不到该工具,fbc会尝试直接调用它,因为它可能已安装在系统上并位于 PATH 中。
"<target>"指由 -target 选项指定的同名目标平台。
参见
返回 目录