C语言 如何使用OpenWatcom 'owcc'创建DOS .com文件,但没有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(。

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

请注意,带有Open Watcom的COM可执行文件不能回答我的问题,因为那里提供的解决方案都包括OpenWatcom C库。

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

生成的.com文件只有 3 个字节 (xor ax, eax;ret(,我很满意。为了使它实际运行,我必须准备并添加我的.obj文件,其中包含..start:并设置段。

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

最新更新