LNK 2001未解析的外部符号_mainCRTStartup MASM

时间:2012-09-12 00:38:22

标签: assembly linker masm irvine32

我正在大学学习大会,我们获得了一张带有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 个答案:

答案 0 :(得分:3)

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

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

在顶部的高级应该是入口点。输入main

答案 1 :(得分:2)

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

答案 2 :(得分:1)

我知道它有点晚了 - 也许它对某人有所帮助 - 但你应该将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 

注意最后一行

答案 3 :(得分:0)

尝试包含此

includelib \ Irvine \ Irvine32.lib includelib \ Irvine \ User32.lib includelib \ Irvine \ kernel32.lib