5

我正在我的大学学习汇编,我们得到了一张带有 MASM 615 的 CD,我们正在使用 Irvine32 包含库。在学校计算机上一切正常,但是当我尝试在家用计算机上编译和运行相同的代码时,出现链接错误。

INCLUDE Irvine32.inc

.code
main PROC

mov eax,10000h      ; EAX = 10000h
add eax,40000h      ; EAX = 50000h
sub eax,20000h      ; EAX = 30000h
call DumpRegs

exit
main ENDP
END main

此代码在学校的 PC 上运行良好。在家里,我进入 DOS,设置 MASM 文件夹的路径,然后做 Make32 文件。

这是我得到的错误:

LINK32 : error LNK2001: unresolved external symbol _mainCRTStartup
test.exe : fatal error LNK1120: 1 unresolved externals

程序编译(我得到 .lst、.obj 和 .pdb 文件),仅此而已。我在想这是因为我家里有一个 64 位操作系统,但我对如何在 64 位环境中启动和运行它一无所知——CD 或书在 64 位系统上没有任何内容。只有一个 make16 或 make32 .bat 文件。这真的很糟糕,因为这意味着我不能在家做任何工作,除非有工作?

4

4 回答 4

13

其他答案让我感到困惑,所以我将添加我的解决方案。在项目的属性中转到

配置属性>>链接器>>高级

高级中,顶部应该是入口点。输入main.

于 2016-02-27T19:01:24.563 回答
5

我认为您可能需要手动指定入口点,因为 Windows 上的默认入口符号不是 _main 而是错误消息中的 _mainCRTStartup 之一。您可以在链接器选项中使用/ENTRY :entry_point (程序集中的某些过程)指定入口点。

于 2012-09-12T15:08:28.640 回答
3

我知道它有点晚了——也许它对某人有帮助——但你应该公开 main ,像这样

INCLUDE Irvine32.inc

.code
main PROC

mov eax,10000h      ; EAX = 10000h
add eax,40000h      ; EAX = 50000h
sub eax,20000h      ; EAX = 30000h
call DumpRegs

exit
main ENDP

PUBLIC main

END 

注意倒数第二行

于 2013-07-27T15:00:15.037 回答
1

尝试包括这个

includelib  \Irvine\Irvine32.lib
includelib  \Irvine\User32.lib
includelib  \Irvine\kernel32.lib
于 2015-07-30T02:37:52.153 回答