1

根据链接 http://msdn.microsoft.com/en-us/library/fcc1zstk(v=vs.100).aspx

32 位应用程序假设使用 4.00(最低),64 位应用程序假设使用 5.02(最低)

但是我想从该链接中了解此参数和以下语句的意义/含义。

“子系统的选择会影响链接器将选择的入口点符号(或入口点函数)。”</p>

4

3 回答 3

4

简单地说:如果您正在编写一个需要指定的控制台应用程序,/SUBSYSTEM:CONSOLE并且如果您正在编写一个不会自动打开控制台窗口的窗口应用程序,则需要/SUBSYSTEM:WINDOWS. 其他子系统指定您的应用程序在内核模式下运行(但这并不简单),直接与硬件接口或在 Windows CE 设备上运行。

很少需要指定版本。

链接器创建的可执行文件仅根据此选项设置一个标志,负责启动应用程序的 Windows 函数检查此标志以确定如何启动应用程序(附加控制台窗口等)。

于 2013-01-16T08:16:57.817 回答
0

在你的程序中,你有main_tmain等等WinMain。这是你的程序开始的。然而,这不是程序启动的真正入口点,它只是一个从链接到程序的运行时调用的函数。在运行时,通常有一个特殊的函数在调用主函数之前进行一些初始化,这是文档中引用的“入口点”。

子系统设置似乎告诉链接器根据其设置使用不同的“入口点”功能。

于 2013-01-16T08:03:59.073 回答
0

子系统参数的主要意义是确定可执行文件将为哪个子系统构建;无论是控制台应用程序、Windows 应用程序、POSIX 应用程序、设备驱动程序等等。

根据文档,版本号指定可执行文件所需的最低操作系统(或子系统)版本。例如,如果您指定 6.0 (Windows Vista),那么理论上,Windows XP 将拒绝尝试运行可执行文件。我不确定这是否真的是真的,而且我认为以这种方式指定最低操作系统版本不是常见的做法。

对切​​入点的影响描述有点草率;更准确地说,子系统的选择会影响默认入口点。您可以使用参数覆盖此默认值/ENTRY

如下/ENTRY所述,默认设置如下:

  • /SUBSYSTEM:CONSOLE: mainCRTStartup (或 wmainCRTStartup)
  • /SUBSYSTEM:WINDOWS: WinMainCRTStartup (或 wWinMainCRTStartup)
  • /DLL: _DllMainCRTStartup

它还说:“如果未指定 /DLL 或 /SUBSYSTEM 选项,则链接器会根据定义 main 或 WinMain 来选择子系统和入口点。”

IIRC,其他子系统没有默认入口点,您必须明确使用该/ENTRY选项。

于 2013-01-16T22:40:33.153 回答