You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 20.04编译后SDL_Window无法显示的问题求助

解决方案:SDL2窗口无法显示(集成SDL2_gfx后出现)

核心问题分析

你的代码逻辑本身无错误,但集成SDL2_gfx后,窗口显示依赖的渲染流程被隐式改变,加上缺少窗口刷新操作,导致窗口无法正常渲染显示。以下是针对性修复步骤:

1. 确保编译链接参数正确

Ubuntu下编译时,必须同时链接SDL2和SDL2_gfx库,且SDL2_gfx要放在SDL2前面(因SDL2_gfx依赖SDL2的符号)。命令行编译示例:

gcc sdl_test.c -o sdl_test `sdl2-config --cflags --libs` -lSDL2_gfx

若使用Eclipse,在项目属性的「链接器」设置中添加SDL2_gfx库,置于SDL2之后。

2. 补充渲染上下文与窗口刷新

SDL2创建窗口后,需显式创建渲染器并刷新窗口,否则在引入SDL2_gfx的环境下,窗口会处于未激活渲染状态。修改后代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <SDL2/SDL.h>

int main(int argc, char **argv) {

      SDL_Window *window;
      SDL_Renderer *renderer; // 新增渲染器对象

      if(SDL_Init(SDL_INIT_VIDEO) < 0){
            printf("SDL could not initialize! SDL Error: %s\n", SDL_GetError());
            return 1;
            }

      // 添加SDL_WINDOW_SHOWN标志,确保窗口创建后直接显示
      window = SDL_CreateWindow("SDL Example", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_SHOWN);

      if(window == NULL){
            printf("SDL window failed to initialize: %s\n", SDL_GetError());
            return 1;
      }

      // 创建关联窗口的硬件加速渲染器
      renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
      if(renderer == NULL){
            printf("SDL renderer failed to initialize: %s\n", SDL_GetError());
            SDL_DestroyWindow(window);
            SDL_Quit();
            return 1;
      }

      SDL_Event e;
      int quit = 0;
      while(quit == 0){
            while(SDL_PollEvent(&e)){
                  if(e.type == SDL_QUIT){
                        quit = 1;
                  }
                  if(e.type == SDL_KEYDOWN){
                        quit = 1;
                  }
                  if(e.type == SDL_MOUSEBUTTONDOWN){
                        quit = 1;
                  }
            }

            // 清空渲染器(用黑色填充背景)
            SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
            SDL_RenderClear(renderer);

            // 若使用SDL2_gfx绘制图形,在此处调用相关函数(如SDL_RenderDrawLine等)

            // 刷新窗口,将渲染内容同步到屏幕
            SDL_RenderPresent(renderer);

            // 延迟16ms,控制帧率并降低CPU占用
            SDL_Delay(16);
       }

       // 销毁渲染器
       SDL_DestroyRenderer(renderer);
       SDL_DestroyWindow(window);

       SDL_Quit();

return EXIT_SUCCESS;
}

3. 验证SDL2_gfx安装完整性

确保已安装SDL2_gfx的开发包:

sudo apt update && sudo apt install libsdl2-gfx-dev

4. 确认窗口显示标志

创建窗口时添加SDL_WINDOW_SHOWN标志,避免窗口被默认隐藏。

内容的提问来源于stack exchange,提问作者Clayton Wasenius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 05:06:02