我知道VisualC++链接器在选项mainCRTStartup
被设置为wmainCRTStartup
时选择/SUBSYSTEM
/CONSOLE
。
我不明白的是链接器如何在两者之间进行选择。
我在VC 2015上用一个简单的程序进行了测试。如果wmain存在(甚至main也存在),则调用wmain。否则将调用main。
最佳答案
链接器将尝试通过遍历obj的符号表来推断需要哪个入口点例程。它在main之前搜索wmain,这就是为什么前者被选中的原因,即使你两者都有。然后,链接器从默认的libc静态库中提取相应的启动例程。
通过向链接器提供/entry、/defaultlib和/nodefaultlib选项,可以覆盖大部分内容。但通常情况下,你会让链接器自动处理这个问题。
另外,程序中应该只有一个主C函数。要么显式定义一个或另一个,要么走tchar路径,让编译器用main()或wmain()替换tmain(),这取决于是否定义了unicode。
关于c - mainCRTStartup与wmainCRTStartup,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36187320/