MASMPlus编译出错:error LNK2001: unresolved external symbol _WinMainCRTStartup
初学汇编,感觉很多不懂。不过那也是,如果懂了的话就不用学了,从无到有学习一门编程语言果然不是那么容易的一件事。
学习汇编总得要有一款汇编软件才行,没理由只是使用Windows自带的DEBUG。于是上了比较有名的AOGO汇编小站,浏览了一下,看到首页就有提示软件下载,非常好,不用我找了。虽然这个MASMPLUS不是老师推荐的那个,不过应该也不会差吧。
下载好了之后直接安装完毕,我马上就打开软件打算试一试这个东西。按着书上的一个简单程序打了上去,然后按那个“一步完成”按钮,下面马上显示出错。靠,不是吧,我对着书本来写上去的啊,难道这个“一步完成”有缺陷的?于是我试了试一步一步来进行。先是编译成“ASM”文件,然后接着连接成“OBJ”文件。就在连接成“OBJ”文件的这个步骤里面提示错误了。提示如下:
“LINK : error LNK2001: unresolved external symbol _WinMainCRTStartup
2.exe : fatal error LNK1120: 1 unresolved externals”
2.exe : fatal error LNK1120: 1 unresolved externals”
搞什么啊,难道是我安装在D盘不行?难道要默认安装在C盘?不太可能吧?嗯,应该跟这个没关系。刚刚都没开始正式练习就来了这么个拦路虎,真有点郁闷 -_-!
不管那么多,先看看它提示说什么问题吧。虽然我英语不怎么好,但也总算认得它总体意思,大概就是说那个叫WinMainCRTStartup什么的外部符号未解决。应该是没找到这个东西之类吧。
好,问题大致上了解了。我根本不知道那个是什么东西,只好自己摸索一下了。在确定自己没有打错字母的之后,看来问题应该不是出在自己身上,不过这个软件才刚刚下载回来的啊,我都没有进行什么其他设置,也没有删除什么文件啊。只好从其他地方入手思考了。
经过参考了相关的资料和进行了一些思考之后,总算给我搞定了。原来只要在“配置”标签那里选择“系统配置”,再在编译/脚本那里勾上单独文件默认使用DOS模式(第二链接器)就可以了。
总算是能够编译运行了。用个软件都要花这么些时间,真够无奈的了,不过还好,起码问题是解决了。
总结一下
其实,问题的原因是:把编译Windows程序的选项打开了,这是一个DOS程序,当然不会有“ _WinMainCRTStartup”这种东西,这是Windows程序才用,就在外部引用的定义文件里。因此,选择使用DOS模式的就可以解决问题了。