c - 我需要 SDL 的 main() 函数吗?

标签 c sdl-2

我正在考虑使用我自己的私有(private)语言中的 SDL2。他们可以与 SDL2.dll 等动态库对话,因此这可能是可行的。但首先我需要使用 C 来尝试一下。

但是,hello-world 风格的教程难以捉摸(它们适用于错误的 SDL 版本,或者它们使用的是 C++ 或其他语言)。最后,我整理了一个最小程序(只需 #include "sdl.h"和 main(){} 就会显示问题),并且我无法链接,因为我没有 main() 或 WinMain()。

我知道 SDL.h 或其他 header 重新定义了我的“main”,因为它想使用自己的 main() 例程。它可能存在于 SDL 的某个静态链接库中,因为它不能位于 SDL2.dll 内。我没有该库,并且看不到获取它的任何意义,因为我无法以自己的语言使用它(它也将是特定于实现的,甚至作为源代码出现,在这种情况下忘记它!)。

我设法通过添加“#undef main”来使基本测试程序正常工作。

但是,我的问题是,SDL 的 main() 中是否有任何我需要的基本内容,或者将来可能会困扰我的内容?或者没有它我可以逃脱吗? (为什么 SDL 不只依赖于某些 SDL_init() 例程供我从 main() 调用?)

(我注册了 SDL 论坛来询问这个问题,但显然他们不允许我发帖,因为我没有正确的权限。那么注册的意义何在?!)

最佳答案

而不是 #undef main你应该#define SDL_MAIN_HANDLED在包含 SDL.h 之前(或通过编译器标志定义它)。

如果您实现自定义主函数,您至少应该调用 SDL_SetMainReady 。对于某些平台,SDL 执行额外的操作,例如设置特定的异常处理程序、将参数转换为 UTF8 或完全不同的操作(例如,对于 android,它实际上并不是一个 main 函数,而是 JNI 函数)。

SDL2main 中定义的 SDL 入口点库,不太明白你做了什么“没有它”(除了手动删除它)。您始终可以从 libsdl.org 下载存档或自己构建。

关于c - 我需要 SDL 的 main() 函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40622215/

相关文章:

C 指针、最小值和最大值

c - UNIX远程过程调用的端口和IP

java - Java 中的 C 指针等价

我可以比较 2 个 SDL_Surface(它们是否相同)

c++ - 如何避免 SDL 2 游戏中的运动模糊?

c++ - 好的做法将我的DLL使用的辅助文件放在哪里

c - Ubuntu::./program: 权限被拒绝

android - 为 Android 编译 SDL2

c++ - 在 glGenTextures 上获取 EXC_BAD_ACCESS

C++ SDL2圆周运动