You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Turbo C++编译链接报错‘No DOS extensions in the DPMI server’求助

问题解决步骤

一、修复「no DOS extensions in the DPMI server」错误

这个错误是因为程序运行需要DPMI(DOS保护模式接口)支持,但DOSBox默认未加载对应服务程序,可按以下方式解决:

  • 在DOSBox中先运行Turbo C++配套的DPMI服务器程序:\Compiler\BIN\CWSDPMI.EXE,加载完成后再执行你的编译生成的EXE文件。
  • 确认编译模式:你使用了-ml(large内存模型),Turbo C++ 3.0的16位large模式程序依赖DPMI环境,若不需要大内存模型,可尝试改用-ms(small模型)编译测试,同时确保汇编代码的.MODEL指令同步修改为small。

二、修复TLINK链接错误(修改名字修饰后)

你通过extern "C"和将汇编符号改为_factorial解决了C++名字修饰问题,现在TLINK报错大概率是以下场景,对应处理:

1. 内存模型不匹配

  • 确保C代码与汇编代码使用完全一致的内存模型:汇编中用了.MODEL large,C编译必须保留-ml参数,不能遗漏。
  • 单独编译汇编文件时需指定模型:用TASM编译时加/ml参数,命令为:TASM /ml /c factorial2.asm(/c表示只编译生成OBJ文件,不链接)。

2. 符号定义/声明不一致

  • 检查汇编中EXTRN _n:word:C的全局变量n是int类型,在Turbo C 3.0的large模式下int为16位(对应汇编的word),该声明正确,确保C++代码中n确实是全局变量,未被误定义为局部变量。
  • 确认汇编中PUBLIC _factorial:必须明确声明该符号为公共符号,拼写需与C++中extern "C" int factorial();完全一致(DOS环境大小写不敏感,但尽量保持统一)。

3. TLINK命令参数错误

建议分步编译链接,避免TCC自动调用时的参数问题:

  1. 编译C++文件:
TCC -c -ml -I\Compiler\INCLUDE factorial1.cpp
  1. 编译汇编文件:
TASM /ml /c factorial2.asm
  1. 手动执行TLINK链接:
TLINK /ml \Compiler\LIB\c0l.obj factorial1.obj factorial2.obj, factorial.exe, , \Compiler\LIB\clib.lib

参数说明:

  • /ml:指定large内存模型
  • c0l.obj:large模型的程序启动代码,必须放在OBJ列表最前面
  • clib.lib:large模型的C标准库文件
  • 格式规则:TLINK [选项] 启动代码.obj 你的OBJ文件..., 输出EXE文件名, 映射文件名, 依赖库列表

4. 库文件路径或缺失问题

确保TLINK能找到c0l.obj和clib.lib,如果\Compiler\LIB路径正确则无需修改,若无法识别,直接写入完整路径即可。

补充验证

  • 生成EXE后,务必先加载CWSDPMI.EXE再运行程序,避免再次触发DPMI错误。
  • 如果仍报错,记录TLINK的具体错误信息(比如「Undefined symbol _factorial」「Segment size exceeds limit」等),可进一步精准定位问题。

内容的提问来源于stack exchange,提问作者Kien Nguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 03:15:57