16 个稳定版本
3.0.2 | 2022 年 11 月 11 日 |
---|---|
3.0.0 | 2022 年 10 月 27 日 |
2.0.11 | 2022 年 10 月 27 日 |
2.0.10 | 2021 年 12 月 5 日 |
1.0.2 | 2021 年 5 月 1 日 |
#160 in 操作系统
315KB
2K SLoC
Kerbal 链接器 (kld)
Kerbal 链接器,或 KLinker,是一个完全自定义构建的链接器,旨在支持 Kerbal 操作系统的编译工具链开发。KLinker 将 KerbalObject 文件链接到 KerboScript 机器码文件,这些文件可以在 kOS 中运行。
为了能够检查该程序所消耗和输出的文件,创建了工具 kDump。
如果提供符合 KerbalObject 文件格式的规范 规范 的合规 KerbalObject 文件,则此链接器可以成功创建可执行文件和共享库。这些 KerbalObject 文件可以由任何生成它们的汇编器或编译器创建,例如 Kerbal Assembler。
功能
- 符号重定位
- 本地符号支持
- 链接时文件大小优化
安装
Kerbal 链接器可以通过 cargo 通过 crates.io 安装,也可以作为独立二进制文件安装。
Windows
- 从右侧的发行版下载 .msi 文件
- 运行安装程序
- kld 应已添加到您的 PATH,并可在任何 CMD 或 Powershell 窗口中使用
Arch Linux
-
从右侧的发行版下载 PKGBUILD
-
将其复制到临时文件夹中
-
运行
makepkg -si
安装 klinker 及其所有依赖项。 -
kld 应已添加到您的 PATH,并可在任何终端中使用
独立可执行文件
- 从右侧的发行版下载并解压缩 .zip 文件
- 将可执行文件放置在所需的位置
- 通过终端、Windows 上的 Powershell 或 Mac OS 或 Linux 的默认终端运行可执行文件。
Cargo
cargo install klinker
kld 应已添加到您的 shell 的 PATH,并可在任何终端中运行
用法
安装后,可以通过 kld 调用 Kerbal 链接器
可以通过运行以下命令从程序本身访问帮助
kld --help
klc 参数的基本格式为
kld [FLAGS] [OPTIONS] <INPUT>... -o <OUTPUT PATH>
运行 kld
时,链接器无法推断输出文件名,因此必须始终指定一个。这可以通过向 kld 传递 -o 标志来完成
kld -o myprogram.ksm
如果输出路径不以 .ksm 结尾,kld 将尝试添加它。
kld 可以一次接收多个文件作为输入,多个输入文件以空格分隔的路径输入
kld librocket.ko mathlib.ko main.ko -o launch.ksm
可以通过指定 -s 标志将链接器置于共享库模式。此模式只需要存在 _init 函数。
kld libdock.ko librendezv.ko -o docking.ksm
该文件不能直接运行,而应该从另一个程序加载。
kld 还允许用户指定程序的入口点,或程序启动运行的函数。默认情况下,这是 _start 函数。可以通过使用 -e 标志来更改它
kld -e __main__ main.ko -o program.ksm
这将使链接器搜索名为 "__main__" 的函数,然后创建 KSM 文件,以便程序启动时运行该代码。
注意
Kerbal Linker 当前使用链接时文件大小优化。如果特定情况下认为其操作不受欢迎,则可能可以通过命令行标志禁用此功能。目前,这是通过找出所有 KerbalObject 文件内部哪些函数实际上被代码引用,该代码可能有运行的可能性来实现的。如果一个函数在任何被引用的地方都没有被引用,则该函数不会包含在最终的 KSM 文件中。这意味着对于诸如程序语言的库这样的代码,几乎从未完全使用,文件大小不会非常大。
这与 kOS 内部的 KerboScript 的工作方式形成对比,因为 KerboScript 代码都是通过运行其他脚本在运行时加载的,所有代码都必须存在,这意味着可以编译并转换为 KerbalObject 文件的任何代码可以比等效的 KerboScript 库小得多。
依赖项
~1.8–2.5MB
~44K SLoC