5 linker dos memory-model turbo-c x86-16
我正在尝试使用 Turbo C 编译器和链接器编译一个简单的程序并将其链接到 DOS .com 文件。我尝试了我能想到的最简单的 C 程序。
void main()
{}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
每个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;
}
Run Code Online (Sandbox Code Playgroud)
如果我们想编译并链接它,命令将是:
tcc -IF:\TURBOC3\INCLUDE -c -mt test.c
tlink -t -LF:\TURBOC3\LIB c0t.obj test.obj,test.com,test.map,cs.lib
Run Code Online (Sandbox Code Playgroud)
您必须使用适合您自己的环境的路径。这些命令应该生成一个名为 TEST.COM 的程序。运行时应该打印:
你好世界!
Cly*_*ian -3
你的问题是关于“入口点”
\n\n某些编译器或链接器可以识别void main()省略返回值的入口点,但不是全部。
您应该使用int main()入口点来更好地控制应用程序,并且编译器可以将主函数识别为入口点
例子:
\n\nint main() {\n/* some compiler return 0 when you don\'t for main,\n they can ask for return value */\n}\nRun Code Online (Sandbox Code Playgroud)\n\n来自 geekforgeek:
\n\n\n\n\n符合要求的实现可能会提供 main() 的更多版本,但它们都必须具有返回类型 int。main() 返回的 int 是程序向调用它的系统 \xe2\x80\x9c 返回值的一种方式。在不提供此类功能的系统上,返回值将被忽略,但这并不会使 \xe2\x80\x9cvoid main()\xe2\x80\x9d 合法 C++ 或合法 C . 即使您的编译器接受 \xe2\x80\x9cvoid main()\xe2\x80\x9d 也要避免使用它,否则可能会被 C 和 C++ 程序员视为无知。\n 在 C++ 中,main() 不需要包含显式 return 语句。此时返回值为0,表示执行成功。
\n
来源: https: //www.geeksforgeeks.org/fine-write-void-main-cc/
\n| 归档时间: |
|
| 查看次数: |
1823 次 |
| 最近记录: |