libSDL2main.a 的目的是什么?
What is the purpose of libSDL2main.a?
一些消息来源说在构建 SDL2 程序时将 -lSDL2main.a
作为 link 反对的文件之一,但有些则没有。该程序在任何一种情况下都可以正常工作。它有什么用?
其目的是使入口点在所有平台上都相同 - int main(int argc, char **argv)
,使用 UTF8 编码的参数。虽然它是这样的,例如linux(其中 SDLmain 不存在或为空),其他目标系统可能遵循不同的方案。
例如,windows 程序可能有不同的入口点 - main
、WinMain
、wmain
。使用 SDLmain,您不需要以不同方式处理它 - 只需像在其他系统上一样使用 main
(由 SDL 重命名为 SDL_main
)。
基本上在你的代码中,它只归结为 SDL_main.h
header 中的这一行(如果你包含 SDL.h
则自动包含):
#define main SDL_main
(仅在具有 SDLmain 实现的系统上)。它将你的 main
重命名为 SDL_main
并注入 system-specific 入口点(在 SDL2main
库中实现),它转换参数,进行一些 platform-specific 初始化,并调用你的SDL_main
.
这是否是一件好事值得商榷;在包含 SDL.h
之前,可以使用 #define SDL_MAIN_HANDLED
禁用此功能。在那种情况下,您定义自己的 platform-specific 入口点,进行所有必需的初始化,但 SDL 要求您在调用任何其他 SDL 内容之前先调用 SDL_SetMainReady
。
因此,回答您的问题,为什么有时使用它而有时不使用它 - 之所以如此,是因为在某些情况下,当您已经拥有“标准”main
时,它什么都不做。
一些消息来源说在构建 SDL2 程序时将 -lSDL2main.a
作为 link 反对的文件之一,但有些则没有。该程序在任何一种情况下都可以正常工作。它有什么用?
其目的是使入口点在所有平台上都相同 - int main(int argc, char **argv)
,使用 UTF8 编码的参数。虽然它是这样的,例如linux(其中 SDLmain 不存在或为空),其他目标系统可能遵循不同的方案。
例如,windows 程序可能有不同的入口点 - main
、WinMain
、wmain
。使用 SDLmain,您不需要以不同方式处理它 - 只需像在其他系统上一样使用 main
(由 SDL 重命名为 SDL_main
)。
基本上在你的代码中,它只归结为 SDL_main.h
header 中的这一行(如果你包含 SDL.h
则自动包含):
#define main SDL_main
(仅在具有 SDLmain 实现的系统上)。它将你的 main
重命名为 SDL_main
并注入 system-specific 入口点(在 SDL2main
库中实现),它转换参数,进行一些 platform-specific 初始化,并调用你的SDL_main
.
这是否是一件好事值得商榷;在包含 SDL.h
之前,可以使用 #define SDL_MAIN_HANDLED
禁用此功能。在那种情况下,您定义自己的 platform-specific 入口点,进行所有必需的初始化,但 SDL 要求您在调用任何其他 SDL 内容之前先调用 SDL_SetMainReady
。
因此,回答您的问题,为什么有时使用它而有时不使用它 - 之所以如此,是因为在某些情况下,当您已经拥有“标准”main
时,它什么都不做。