作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
I understand that Visual C++ Linker chooses mainCRTStartup
/wmainCRTStartup
when option /SUBSYSTEM
is set to CONSOLE
.
我不明白的是链接器如何在两者之间进行选择。
我在VC 2015上用一个简单的程序测试过,如果wmain存在(连main也存在),就调用wmain。否则调用 main。
最佳答案
链接器将尝试通过遍历 objs 的符号表来推断需要哪个入口点例程。它在 _main 之前搜索 _wmain,这就是为什么选择前者,即使您同时拥有两者。然后链接器从您的默认 libc 静态库中提取适当的启动例程。
您可以通过向链接器提供/ENTRY、/DEFAULTLIB 和/NODEFAULTLIB 选项来覆盖其中的大部分内容。但通常情况下,您让链接器自动处理它。
此外,您的程序中应该只有一个主要的 C 函数。要么显式定义其中之一,要么走 TCHAR 路线,让编译器根据是否定义了 UNICODE 将 _tmain() 替换为 main() 或 wmain()。
关于c - mainCRTStartup 与 wmainCRTStartup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36187320/
I understand that Visual C++ Linker chooses mainCRTStartup/wmainCRTStartup when option /SUBSYSTEM is
我是一名优秀的程序员,十分优秀!