我正在大学学习大会,我们获得了一张带有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文件。这是一个真正的无赖,因为这意味着我不能在家里做任何工作,除非有一个解决方案?
答案 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