You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

CMake构建报错LNK1181:无法打开输入文件glew.lib求助

解决LNK1181: 无法打开输入文件'glew.lib'的问题

从你的CMake配置和报错信息来看,问题主要出在GLEW库的链接配置上,我帮你梳理几个核心修复点:

1. 修正库名称与链接变量的匹配问题

你用find_library查找的是静态库glew32s.lib,但在target_link_libraries里写的是glew,链接器会默认去找glew.lib,自然找不到目标文件。需要把查找结果存到明确的变量中,再用这个变量去链接:

修改这部分代码:

# 原代码
find_library(glew glew32s "${glew_DIR}/lib/Release/Win32")

# 修改为
find_library(GLEW_LIB NAMES glew32s PATHS "${glew_DIR}/lib/Release/Win32" REQUIRED)

然后在链接时使用这个变量:

target_link_libraries( engine glfw ${GLEW_LIB} )

REQUIRED参数的好处是,CMake如果找不到库会直接报错,能帮你快速排查路径是否正确。

2. 添加静态GLEW的预处理器定义

因为你用的是静态版本的GLEW(glew32s),必须在编译时定义GLEW_STATIC,否则编译器会默认尝试链接动态库的导入库。给engine目标添加这个定义:

target_compile_definitions(engine PUBLIC GLEW_STATIC)

3. 确保平台架构匹配

你硬编码了Win32的库路径,但如果在Visual Studio中生成的是x64解决方案,32位的库肯定无法被链接。可以优化路径配置,让CMake根据当前生成的架构自动选择:

# 替换原来的find_library路径部分
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
    # 64位平台
    set(GLEW_LIB_PATH "${glew_DIR}/lib/Release/x64")
else()
    # 32位平台
    set(GLEW_LIB_PATH "${glew_DIR}/lib/Release/Win32")
endif()

find_library(GLEW_LIB NAMES glew32s PATHS ${GLEW_LIB_PATH} REQUIRED)

这样不管你生成32位还是64位项目,CMake都会自动匹配对应的库路径。

4. 可选:改用CMake配置文件导入GLEW(更可靠)

如果你的GLEW包自带CMake配置文件(比如glew-config.cmake),可以改用find_package来导入,它会自动处理库路径、包含目录和预处理器定义,减少手动配置的错误:

set(glew_DIR ${CMAKE_SOURCE_DIR}/Dependencies/GLEW/lib/cmake/glew) # 替换成你的配置文件实际路径
find_package(glew REQUIRED)
target_link_libraries(engine glfw GLEW::GLEW)

整合修改后的核心代码片段

把以上修复点整合后,GLEW相关的配置代码应该是这样的:

set(glew_DIR ${CMAKE_SOURCE_DIR}/Dependencies/GLEW)

# 根据架构选择库路径
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
    set(GLEW_LIB_PATH "${glew_DIR}/lib/Release/x64")
else()
    set(GLEW_LIB_PATH "${glew_DIR}/lib/Release/Win32")
endif()

find_library(GLEW_LIB NAMES glew32s PATHS ${GLEW_LIB_PATH} REQUIRED)

include_directories(${glew_DIR}/include)
target_compile_definitions(engine PUBLIC GLEW_STATIC)

target_link_libraries( engine glfw ${GLEW_LIB} )

额外检查项

  • 确认你的Dependencies/GLEW/lib/Release/Win32(或x64)目录下确实存在glew32s.lib文件,如果没有,可能是GLEW包下载不完整,或者需要手动编译GLEW生成静态库。
  • 可以在Visual Studio中右键项目 -> 属性 -> 链接器 -> 输入 -> 附加依赖项,查看是否正确添加了glew32s.lib(而非glew.lib)。

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

火山引擎 最新活动