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

Windows平台下使用CMake运行SDL2HelloWorld程序无响应求助

程序运行无反应:既不弹出窗口也无cout输出

问题描述

编译运行程序后完全没有反应,既不弹出SDL窗口,连最开始的cout输出都看不到。

相关文件

./src/main.cpp

#include <SDL2/SDL.h>
#include <iostream>

#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 480

int main(int argc, char* args[]) {
  std::cout << "Le programme se lance"; // 至少应该输出这句话
  SDL_Window* window = NULL;
  SDL_Surface* screenSurface = NULL;
  if (SDL_Init(SDL_INIT_VIDEO) < 0) {
    std::cout << "could not initialize sdl2 :" << SDL_GetError() << std::endl;
    return 1;
  }
  window = SDL_CreateWindow(
                "hello_sdl2",
                SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
                SCREEN_WIDTH, SCREEN_HEIGHT,
                SDL_WINDOW_SHOWN
                );
  if (window == NULL) {
    std::cout << "could not create window:" << SDL_GetError() << std::endl;
    return 1;
  }
  screenSurface = SDL_GetWindowSurface(window);
  SDL_FillRect(screenSurface, NULL, SDL_MapRGB(screenSurface->format, 0xFF, 0xFF, 0xFF));
  SDL_UpdateWindowSurface(window);
  SDL_Delay(10000);
  SDL_DestroyWindow(window);
  SDL_Quit();
  return 0;
}

./CMakeLists.txt

cmake_minimum_required(VERSION 3.25.1)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
project("Test")
set(SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}")

set(SDL2_DIR "${SRC_DIR}/lib/cmake/SDL2")

find_package(SDL2 REQUIRED)
include_directories(${SDL2_INCLUDE_DIRS})

add_executable(MAIN "${SRC_DIR}/src/main.cpp")
target_link_libraries(MAIN ${SDL2_LIBRARIES})

项目架构

项目架构图

所有SDL相关文件来自SDL2-devel-2.26.1-mingw压缩包。

执行命令

cd ./build/
cmake .. -G "MinGW Makefiles"
make
./MAIN.exe

运行结果

运行结果截图


解决方法

  1. 强制刷新标准输出
    你的cout语句没有换行符,标准输出默认行缓冲模式,内容会留在缓冲区无法立即打印。把第一行输出改成:

    std::cout << "Le programme se lance" << std::endl;
    

    或者手动刷新缓冲区:

    std::cout << "Le programme se lance";
    std::cout.flush();
    
  2. 补充SDL运行时依赖
    MinGW编译的程序需要对应SDL2运行时动态库SDL2.dll才能启动。从SDL压缩包的bin目录下复制SDL2.dll到MAIN.exe所在的build目录,否则程序会因找不到依赖直接静默退出。

  3. 验证依赖链接情况
    在MinGW环境下用ldd MAIN.exe命令检查程序依赖是否全部能找到,若有缺失及时补充对应库文件。

  4. 开启SDL日志排查初始化问题
    在SDL_Init前添加日志级别设置,方便定位初始化阶段的错误:

    SDL_SetHint(SDL_HINT_LOG_LEVEL, "verbose");
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:41:43