使用 Turbo C 编译并链接到 .com 文件

2024-05-15

我正在尝试使用 Turbo C 编译器和链接器编译一个简单的程序并将其链接到 DOS .com 文件。我尝试了我能想到的最简单的 C 程序。

void main()
{}

Turbo C 链接器中是否有链接到 com 文件的命令行参数?

我从链接器收到的错误消息如下:

“致命:无法生成 COM 文件:入口点地址无效”

我知道 com 文件需要入口点位于 100h。 Turbo C 是否有设置此地址的选项?


我已经很长时间没有真正尝试使用 Turbo-C 来做这种事情了。如果您在命令行上分别使用 TCC.EXE 和 TLINK.EXE 进行编译和链接,那么这可能适合您。

要编译并链接到 COM 文件,您可以对每个 C 源文件执行此操作,为每个文件创建一个 OBJ 文件:

tcc -IF:\TURBOC3\INCLUDE -c -mt file1.c
tcc -IF:\TURBOC3\INCLUDE -c -mt file2.c
tcc -IF:\TURBOC3\INCLUDE -c -mt file3.c

tlink -t -LF:\TURBOC3\LIB c0t.obj file1.obj file2.obj file3.obj,myprog.com,myprog.map,cs.lib

Each C文件是使用单独编译的-mt(微小内存模型)到相应的 OBJ 文件。这-I选项指定环境中 INCLUDE 目录的路径(相应更改)。这-c选项告诉 TCC 仅编译为 OBJ 文件。

链接时-t告诉链接器生成 COM 程序(而不是 EXE),-LF:\TURBOC3\LIB是您环境中库目录的路径(相应更改)。 C0T.OBJ 是C小内存模型的运行时文件。这包括您缺少的主要入口点。然后列出所有其他 OBJ 文件,并用空格分隔。第一个逗号后面是输出文件名。如果使用-t选项使用 COM 扩展名来命名程序。第二个逗号后面是 MAP 文件名(如果不需要 MAP 文件,可以将文件名留空)。第三个逗号之后是用空格分隔的库列表。对于微型模型,您需要使用小型模型库。这C小内存模型的库称为 CS.LIB 。

举个例子,如果我们有一个名为 TEST.C 的源文件,如下所示:

#include<stdio.h>

int main()
{
    printf("Hello, world!\n");
    return 0;
}

如果我们想编译并链接它,命令将是:

tcc -IF:\TURBOC3\INCLUDE -c -mt test.c
tlink -t -LF:\TURBOC3\LIB c0t.obj test.obj,test.com,test.map,cs.lib

您必须使用适合您自己的环境的路径。这些命令应该生成一个名为 TEST.COM 的程序。运行时应该打印:

你好世界!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Turbo C 编译并链接到 .com 文件 的相关文章

随机推荐