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

Windows下CMake链接GLEW静态库出现未定义引用错误求助

问题描述

Windows环境下基于CMake搭建OpenGL开发的C++项目,链接GLFW和静态GLEW库时,调用glewInit()出现未定义引用错误:

CMakeFiles/BideoGame.dir/objects.a(main.cpp.obj):main.cpp:(.text+0x7e): undefined reference to `glewInit@0'

项目的CMakeLists.txt配置:

cmake_minimum_required(VERSION 3.28)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

project(BideoGame VERSION 1.0)

add_compile_definitions(GLEW_STATIC)

find_package(OpenGL REQUIRED)
include_directories(${OPENGL_INCLUDE_DIRS})

set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)

add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/lib/glfw-3.3.9)

file(GLOB_RECURSE SRC_FILES  src/*.cpp)
add_executable(BideoGame ${SRC_FILES})

target_link_libraries(BideoGame glfw OpenGL::GL )
target_link_libraries(BideoGame OpenGL::GL)
target_link_libraries(BideoGame ${CMAKE_CURRENT_SOURCE_DIR}/lib/glew-2.1.0/lib/Release/x64/glew32s.lib)

target_include_directories(BideoGame PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/lib/glew-2.1.0/include)

main.cpp代码:

#include <stdio.h>
#include <GL/glew.h>
#include <GLFW/glfw3.h>


int main(void)
{
    GLFWwindow* window;

    if (!glfwInit())
        return -1;

    window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
    if (!window)
    {
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window);

    glewInit();

    while (!glfwWindowShouldClose(window))
    {
        glClear(GL_COLOR_BUFFER_BIT);

        glBegin(GL_TRIANGLES);
        glVertex2f(-0.5f,-0.5f);
        glVertex2f(0.5f, -0.5f);
        glVertex2f(0.0f, 0.5f);
        glEnd();

        glfwSwapBuffers(window);

        glfwPollEvents();
    }

    glfwTerminate();
    return 0;
}

移除glewInit()后可正常编译,保留则报错。

解决方案

1. 确保架构匹配

你链接的是x64版本的glew32s.lib,必须保证CMake生成的项目也是x64架构:

  • 命令行配置时添加参数:cmake .. -G "Visual Studio 17 2022" -A x64(根据你的VS版本调整)
  • 使用CMake GUI时,在"Configure"步骤选择"x64"作为目标平台,避免默认的Win32(x86)架构。

2. 优化链接配置

合并重复的target_link_libraries调用,确保依赖顺序正确(依赖库放在被依赖库之后),去掉冗余的重复链接项:

target_link_libraries(BideoGame
    glfw
    OpenGL::GL
    ${CMAKE_CURRENT_SOURCE_DIR}/lib/glew-2.1.0/lib/Release/x64/glew32s.lib
)

3. 验证GLEW库完整性

确认glew32s.lib存在于指定路径,且是对应版本的静态库。若文件损坏或版本不匹配,重新下载官方GLEW二进制包并解压到正确目录。

4. 改用CMake规范处理GLEW(可选)

通过find_package让CMake自动管理GLEW的编译定义和链接路径,更可靠:

# 添加GLEW路径配置
set(GLEW_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/lib/glew-2.1.0)
set(GLEW_STATIC ON)
find_package(GLEW REQUIRED)

# 链接时直接使用GLEW::GLEW目标
target_link_libraries(BideoGame
    glfw
    OpenGL::GL
    GLEW::GLEW
)

这种方式会自动帮你设置GLEW_STATIC编译定义,无需手动添加。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:25:12