【问题标题】:How to fix error L2029 on microsoft 16-bit linker?如何修复 Microsoft 16 位链接器上的错误 L2029?
【发布时间】:2020-01-04 09:33:57
【问题描述】:

我正在尝试从MS-DOS 2.0 source code 组装 debug.exe/com,起初它不起作用,但我一直在更改一些文件名,并且我已经设法获得一个 .obj 文件,使用链接( 16位版本)部分命令报错(error L2029: unresolved external),不知道怎么办,需要添加一些库吗?

这是失败的错误和命令:

batch
C:\Users\<my_username>\Desktop\Assembly>link16.exe

Microsoft (R) Segmented Executable Linker  Version 5.60.339 Dec  5 1994
Copyright (C) Microsoft Corp 1984-1993.  All rights reserved.

Object Modules [.obj]: debug.obj
Run File [debug.exe]: 
List File [nul.map]:
Libraries [.lib]:
Definitions File [nul.def]:
LINK : warning L4021: no stack segment

debug.obj(DEBUGGER) : error L2029: 'PARSERR' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'GO' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'REG' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'NAME' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'BYTEBUF' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'RELEASEPARITY' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'DUMP' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'FILL' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'DEFIO' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'LINEBUF' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'COMPARE' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'DSIZ' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'MOVE' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'LOAD' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'DEFDUMP' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'PARITYMES' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'DISPB' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'TRACE' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'TRAPPARITY' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'PERR' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'HEADSAVE' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'BADVER' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'DATAEND' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'ASSEM' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'LBUFSIZ' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'SPSAVE' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'ENDMES' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'BACMES' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'ASMADD' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'SKIP_FILE' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'PREPNAME' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'NEWEXEC' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'ZTRACE' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'DSSAVE' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'DISADD' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'DWRITE' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'DEBUG_FOUND' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'STACK' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'SEARCH' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'ENTER' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'QFLAG' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'INPUT' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'PARITYFLAG' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'UNASSEM' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'GETHEX' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'GETEOL' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'CSSAVE' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'CARRET' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'NOREGL' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'OUTPUT' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'USER_PROC_PDB' : unresolved external
debug.obj(DEBUGGER) : error L2029: 'IPSAVE' : unresolved external


There were 52 errors detected

我使用的代码、工具和其他依赖可以从here下载。

如何解决这些未解决的错误?

【问题讨论】:

  • 您可以使用link16 debug.obj,debug.exe,,,在命令行中提供它们,而不是像这样输入所有名称

标签: assembly linker masm x86-16 16-bit


【解决方案1】:

我编写了一个脚本来组装 MS-DOS 2.00 的 DEBUG。脚本如下:https://hg.ulukai.org/ecm/msdos2/file/05669dfa5edd/v2.0/source/debug/makdebug.bat 全文引用:

@echo %DEBUG%off
masm debug debug debug;
masm debasm debasm debasm;
masm debcom1 debcom1 debcom1;
masm debcom2 debcom2 debcom2;
masm debconst debconst debconst;
masm debdata debdata debdata;
masm debmes debmes debmes;
masm debuasm debuasm debuasm;
link debug debasm debcom1 debcom2 debconst debdata debmes debuasm;
exe2bin debug
move /y debug.bin debug.com

在我的仓库中,我还将所有文件都移到了一个子目录中。

【讨论】:

  • 更多信息在bttr-software.de/forum/… "Building MS-DOS 2.00's DEBUG (version 2.30)"
  • 我无法使用 masm 构建 debcom2,但感谢您添加的链接,我下载了 debcom2.obj 并最终构建调试,谢谢!
  • 构建 debcom2 是如何失败的?
  • 我真的不能告诉你,我使用的是 DOSBox,因为我有一个 64 位系统,我只能看到最后的错误......
【解决方案2】:

unresolved external 链接器错误告诉您在您正在处理的目标文件中找不到符号。在您的情况下,您只是将DEBUG.ASM 组装到DEBUG.OBJ,然后链接到DEBUG.EXE。粗略地看一下MS-DOS 2.0 source code 表明许多缺失的符号位于DEBDATA.ASMDEBCONST.ASMDEBCOM2.ASM 中(可能是其他文件,但那些是3 个包含大部分这些符号的文件)。您需要将这些 ASM 文件组装成目标文件,并将它们与您的 DEBUG.OBJ 链接在一起,以生成最终的 DEBUG.EXE 可执行文件。

链接时,如果您有未解析的符号,您将需要找到定义符号的文件,然后以某种方式将它们组装并链接到您的程序中。

【讨论】:

  • 您的解决方案也不错,但您错过了一些文件,也谢谢您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多