Windows下使用Mingw编译GLFW和GLEW
下载源码
1、进入 GLFW官网 跳转GitHub下载源码

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

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

如果要构建动态库,需要把BUILD_SHARED_LIBS勾上,但是这样只会构建出动态库
2、然后点击 Configur 进行配置,再点击Generate生成(进入build目录可以看到生成的Makefile文件)

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

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

GLEW编译
GLEW库与GLFW库的编译方式有所区别,GLEW只有Makefile文件,并且这个Makefile文件中强制依赖Unix的工具链,因此选择手动编译会更加方便
1、先进入源码根目录,打开控制台

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、运行效果


浙公网安备 33010602011771号