在C语言SDL2+OpenGL项目中集成cimgui的头文件问题求助
搞定cimgui集成的头文件与函数声明问题
一、头文件的正确配置方式
- 不用手动复制一堆头文件到项目include,直接在Makefile里加包含路径更省心。你得把这几个目录的路径加到
CFLAGS里:- cimgui的根目录(里面有
cimgui.h) - cimgui自带的imgui核心目录(里面有
imgui.h) - imgui的backends目录(里面有SDL2和OpenGL的后端头文件)
示例Makefile代码:
要是你非要复制头文件,那得把CFLAGS += -I./path/to/cimgui -I./path/to/cimgui/imgui -I./path/to/cimgui/imgui/backendscimgui.h、imgui.h、imgui_impl_sdl2.h、imgui_impl_opengl3.h这几个都放到项目include目录里。 - cimgui的根目录(里面有
二、解决函数隐式声明警告
- 这个警告就是编译器没找到函数声明,你得在代码开头把必要的头文件都包含上:
#include "cimgui.h" #include "imgui_impl_sdl2.h" #include "imgui_impl_opengl3.h" - 另外,编译cimgui的时候,得开SDL2和OpenGL后端的编译宏,比如编译时加
-DIMGUI_IMPL_SDL2 -DIMGUI_IMPL_OPENGL3,不然cimgui不会生成这些后端函数的绑定。 - 链接的时候也别漏库,Makefile里的
LDFLAGS要加上:LDFLAGS += -lcimgui -lcimgui_sdl -lSDL2 -lopengl32
三、纯C环境下的快速集成步骤
- 先确认cimgui源码是完整的,要是用git拉的,记得跑
git submodule update --init把imgui子模块拉下来。 - 编译cimgui时加上后端宏,比如用gcc编译:
gcc -c -o cimgui.o cimgui.c -DIMGUI_IMPL_SDL2 -DIMGUI_IMPL_OPENGL3 -I./imgui -I./imgui/backends - 项目代码里的初始化流程(要在SDL和OpenGL初始化之后):
IMGUI_CHECKVERSION(); ImGuiCreateContext(NULL); ImGuiIO* io = ImGuiGetIO(); (void)io; ImGuiStyleColorsDark(); // 初始化SDL2后端 ImGui_ImplSDL2_InitForOpenGL(window, gl_context); // 初始化OpenGL3后端,版本号根据你的环境改 ImGui_ImplOpenGL3_Init("#version 130"); - 主循环里的渲染流程:
// 开始新帧 ImGui_ImplOpenGL3_NewFrame(); ImGui_ImplSDL2_NewFrame(window); ImGuiNewFrame(); // 写你的GUI控件,比如一个测试窗口 ImGuiBegin("测试窗口"); ImGuiText("这是用cimgui做的GUI"); ImGuiEnd(); // 渲染GUI ImGuiRender(); glViewport(0, 0, (int)io->DisplaySize.x, (int)io->DisplaySize.y); glClearColor(0.45f, 0.55f, 0.60f, 1.00f); glClear(GL_COLOR_BUFFER_BIT); ImGui_ImplOpenGL3_RenderDrawData(ImGuiGetDrawData()); // SDL交换缓冲区 SDL_GL_SwapWindow(window);
内容的提问来源于stack exchange,提问作者Jambo
相关产品推荐
相关产品推荐

