到底是main还是WinMain?





在代码里看到一句:

void WINAPI SetLog(int iTraceLevel),一直不明白,知道看到下面的博客:https://blog.csdn.net/booksyhay/article/details/9615465

在VS2008中新建了一个win32的空工程,准备从0开始,每一行代码都自己写。

在链接时提示错误:

1>LIBCMT.lib(wincrt0.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup


意思是没有找到WinMain函数的定义。

我的程序里面有main函数啊,编译器为什么不链main,而要去链WinMain呢?

扫描二维码关注公众号,回复: 2152206 查看本文章

想了一下,刚才建立工程时的最后一步选的是win32工程。可能是这个原因。



但我又不想回过头再把新建工程的操作再做一遍,猜想应该只需要改一下编译选项的配置就可以的。

可是,到底是要改哪一个选项呢?

为了搞清楚到底是什么差别,特意新建了两个工程,一个选择windows,另一个选择console,然后比较各自的vcproj文件,排除其他不相关的差异,最后定位到这个地方:SubSystem="1"



找啊找,找啊找,终于找到了,打开工程的属性,在配置属性->Linker->System里面:


把该选项由Windows改为Console就编译通过了。


原来,VS2008编译器的运行时库是根据子系统的不同来选择不同的程序入口。如果是console子系统,则查找main作为应用程序的入口;如果是windows,则应用程序的入口为WinMain。

猜你喜欢

转载自blog.csdn.net/hk121/article/details/80960207
今日推荐