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 中失败的主要内容,如果未能解决你的问题,请参考以下文章

SDL 无法创建 OpenGL 窗口

OpenGL程序不显示任何图片

为啥 SDL 程序不显示 BMP 图片?

SDL C++ 问题(处于等待状态的窗口)

SDL2 丢失 OpenGL 上下文或未定义函数

如何使用带有 alpha 掩码的模板缓冲区