SDL_Init_Everything 在 C 中失败
Posted
技术标签:
【中文标题】SDL_Init_Everything 在 C 中失败【英文标题】:SDL_Init_Everything fails in C 【发布时间】:2020-06-14 14:39:06 【问题描述】:我正在尝试使用 SDL 用 C 语言创建游戏。经过一段时间的调试,我在 SDL_Init 发现了一个错误:
#include <SDL2/SDL_ttf.h>
int main(void)
printf("Init attempt\n");
if (SDL_Init(SDL_INIT_EVERYTHING) != 0)
fprintf(stderr, "Failed at SDL init: %s\n", SDL_GetError());
fflush(stderr);
fflush(stdout);
exit(EXIT_FAILURE);
printf("Init success\n");
return EXIT_SUCCESS;
输出如下:
Init attempt
不知何故,写入函数中的 fprintf 正在执行。
我使用的 gcc 命令是:
gcc -Wextra -Wall -pedantic program.c -lpthread -lSDL2 -lSDL2_ttf
注意:如果我使用 g++,一切正常。但是,我必须使用 gcc。
有没有办法修复错误?
【问题讨论】:
在退出前刷新标准错误?并从 SDL_GetError 记录错误 也许将代码简化为一个可以编译但运行时失败的最小示例。也就是说,没有...
也没有frpintf
拼写错误。
好的,感谢您的帮助。完成后我会更新问题
'write' 是一个你正在重新定义的操作系统函数(它是未定义的行为)
哦,好吧,这很有意义。这真的让我很困惑:D 问题的原因是音频子系统的初始化。
【参考方案1】:
使用官方文档 (https://wiki.libsdl.org/SDL_Init) 有一个标志可能与您的设置冲突:SDL_INIT_HAPTIC
我没有收到任何错误或崩溃,所以我不确定,但这个标志可能包含在所有内容中,如果是这样:
It’s disabled by default if you don’t use ./configure; make style builds.
Otherwise it’ll happily build if your headers are new enough.
(https://discourse.libsdl.org/t/sdl2-sdl-init-sdl-init-everything-failing/19250)
您是否尝试通过您只需要的标志进行设置,例如 SDL_INIT_TIMER | SDL_INIT_VIDEO | SDL_INIT_AUDIO
并查看是否可行?
【讨论】:
您是否正在链接您从 SDL 初始化的所有内容?可能值得一试:) 我错了,如果我不初始化 SDL_INIT_AUDIO 我就不会再收到错误了。 很高兴听到! ;)以上是关于SDL_Init_Everything 在 C 中失败的主要内容,如果未能解决你的问题,请参考以下文章