Windows下使用Mingw编译GLFW和GLEW

 下载源码

1、进入 GLFW官网 跳转GitHub下载源码

image

2、进入 GLEW官网 直接下载源码

image

GLFW编译

1、创建Build目录用于存放构建出的产物

image

如果要构建动态库,需要把BUILD_SHARED_LIBS勾上,但是这样只会构建出动态库

2、然后点击 Configur 进行配置,再点击Generate生成(进入build目录可以看到生成的Makefile文件)

image

3、在build目录下使用mingw32-make命令完成编译工作

image

4、然后打开build/src获取生成的库文件(这里也生成了Config.cmake文件,代表支持在Cmake中使用 find_package 方式查询库)

image

GLEW编译

GLEW库与GLFW库的编译方式有所区别,GLEW只有Makefile文件,并且这个Makefile文件中强制依赖Unix的工具链,因此选择手动编译会更加方便

1、先进入源码根目录,打开控制台

image

2、输入命令进行手动编译

// 静态库编译
gcc -c -I./include -DGLEW_STATIC -O2 src/glew.c -o src/glew.o

ar rcs lib/libglew32.a src/glew.o

// 动态库编译
gcc -c -I./include -O2 src/glew.c -o src/glew_dll.o

gcc -shared -Wl,-soname,libglew32.dll -Wl,-out-implib=lib/libglew32.dll.a -o lib/glew32.dll src/glew_dll.o -lglu32 -lopengl32 -lgdi32 -luser32 -lkernel32

代码验证

这里只使用静态库进行演示,创建空白项目,链接库文件

1、目录结构

│   CMakeLists.txt
│   main.cpp
└───dependencies
    ├───GLEW
    │   │   eglew.h
    │   │   glew.h
    │   │   glxew.h
    │   │   wglew.h
    │   │
    │   └───lib
    │           libglew32.a
    │
    └───GLFW
        │   glfw3.h
        │   glfw3native.h
        │
        └───lib
                libglfw3.a

2、CMake构建工程项目

cmake_minimum_required(VERSION 3.10)

project(OPEN_GL_DEMO)

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/dependencies)
set(GLEW_DIR ${CMAKE_CURRENT_SOURCE_DIR}/dependencies/GLEW)
set(GLFW_DIR ${CMAKE_CURRENT_SOURCE_DIR}/dependencies/GLFW)

add_executable(${PROJECT_NAME} main.cpp)

target_compile_definitions(${PROJECT_NAME} PRIVATE GLEW_STATIC)
target_link_directories(${PROJECT_NAME} PRIVATE ${GLEW_DIR}/lib ${GLFW_DIR}/lib)
target_link_libraries(${PROJECT_NAME} PRIVATE glew32 glfw3 opengl32)

3、main.cpp 验证代码是否可执行

main.cpp
#include <GLEW/glew.h>
#include <GLFW/glfw3.h>
#include <iostream>

// 窗口大小
const int WINDOW_WIDTH = 800;
const int WINDOW_HEIGHT = 600;

int main()
{
    // 步骤1:初始化 GLFW
    if (!glfwInit()) {
        std::cerr << "GLFW 初始化失败" << std::endl;
        return 1;
    }

    // 步骤2:设置 OpenGL 版本(可选,指定 3.3 核心配置)
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    // 步骤3:创建窗口和 OpenGL 上下文
    GLFWwindow *window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT, "GLEW + GLFW 示例", nullptr, nullptr);
    if (!window) {
        std::cerr << "GLFW 窗口创建失败" << std::endl;
        glfwTerminate();
        return 1;
    }

    // 步骤4:激活当前窗口的 OpenGL 上下文(关键:必须激活后才能初始化 GLEW)
    glfwMakeContextCurrent(window);

    // 步骤5:初始化 GLEW
    GLenum err = glewInit();
    if (err != GLEW_OK) {
        std::cerr << "GLEW 初始化失败:" << glewGetErrorString(err) << std::endl;
        glfwDestroyWindow(window);
        glfwTerminate();
        return 1;
    }

    // 打印版本信息
    std::cout << "GLEW 版本:" << glewGetString(GLEW_VERSION) << std::endl;
    std::cout << "OpenGL 版本:" << glGetString(GL_VERSION) << std::endl;

    // 步骤6:渲染循环
    while (!glfwWindowShouldClose(window)) {
        // 清空颜色缓冲区
        glClear(GL_COLOR_BUFFER_BIT);
        glClearColor(0.0f, 1.0f, 0.0f, 1.0f); // 清屏颜色为绿色

        // 交换缓冲区
        glfwSwapBuffers(window);
        // 处理窗口事件
        glfwPollEvents();
    }

    // 步骤7:释放资源
    glfwDestroyWindow(window);
    glfwTerminate();
    return 0;
}

4、运行效果

image

posted @ 2025-12-30 21:56  XBGzZ  阅读(234)  评论(0)    收藏  举报