如何使用 OpenWatcom `owcc` 创建 DOS .com 文件,但没有 OpenWatcom libc?

How to create DOS .com file with OpenWatcom `owcc`, but without the OpenWatcom libc?

这是一个简短的 C 文件 cu.c:

int main(int argc, char **argv) {
  (void)argc; (void)argv;
  return 0;
}

当我用 OpenWatcom 将其编译为 DOS .com 文件时,结果几乎是 3 KiB:

$ owcc -bcom -mcmodel=t -fno-stack-check -Os -s -march=i86 -W -Wall -Wextra -o cu.com cu.c
$ ls -l cu.com
-rwxr-x--- 1 pts pts 2938 Jun 20 19:26 cu.com

具有相同功能(仅退出)的最小可能 DOS .com 文件为 1 字节长:它包含单个 ret 指令(字节 0xc3)。

如何在没有 OpenWatcom C 库 (libc) 的情况下将我的 cu.c 文件(可能有一些修改,我不关心 argc 或 argv)编译成较小的 DOS .com 文件,最好少于 100 个字节?我将直接从我的程序调用 DOS API 函数 (int 0x21),因此我不需要任何 OpenWatcom C 库函数。

请注意 COM executables with Open Watcom 没有回答我的问题,因为那里提供的解决方案都包含 OpenWatcom C 库。

我能够通过在我的自定义 .lnk 文件中使用 format dos com 而不是 system com 来解决它。通过这样做,system begin com in link.lnk 中的 libfile cstart_t.obj 没有被使用,因此没有引用 OpenWatcom C 库中的启动代码。

生成的 .com 文件只有 3 个字节(xor ax, eaxret),对此我很满意。为了使它实际上 运行,我必须准备并添加我的 .obj 文件,尽管它包含 ..start: 并设置段。

我仍在寻找不需要自定义 .lnk 文件的解决方案。