CMake+Visual Studio 2017调试模式下找不到glew32d.dll问题求助
解决Visual Studio 2017中找不到glew32d.dll的问题(通过CMake编译链接GLEW和GLFW)
我来帮你搞定这个调试时找不到glew32d.dll的麻烦——咱们通过CMake从源码编译GLEW和GLFW,再把它们和你的项目绑定链接,彻底解决DLL缺失的问题。跟着下面的步骤一步步来:
1. 规整项目文件夹结构(可选但更清晰)
先把GLEW也放到依赖目录里,让整个项目结构更统一,方便CMake管理:
root_project ├── CMakeLists.txt ├── Project 1 │ ├── .h和.cpp文件 │ └── CMakeLists.txt ├── Dependencies │ ├── glfw │ │ ├── include │ │ ├── src │ │ └── ... │ └── glew │ ├── include │ ├── src │ └── ...
如果还没下载GLEW源码,直接去官网下源码包解压到Dependencies/glew目录就行。
2. 配置根目录的CMakeLists.txt
打开根目录的CMakeLists.txt,替换成下面的内容,每一步都加了注释方便理解:
cmake_minimum_required(VERSION 3.10) project(MyRootProject) # 设定C++标准,可根据你的项目需求调整版本 set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 添加GLFW子目录,CMake会自动处理GLFW的编译 add_subdirectory(Dependencies/glfw) # 添加GLEW子目录——部分GLEW版本自带CMakeLists,没有的话看下一步补配置 add_subdirectory(Dependencies/glew) # 最后添加你的项目1 add_subdirectory(Project 1)
给无CMakeLists的GLEW补配置
如果下载的GLEW源码里没有CMakeLists.txt,就在Dependencies/glew目录下新建一个,内容如下:
project(glew) # 收集GLEW的核心源文件 file(GLOB GLEW_SOURCES src/glew.c) # 推荐编译成静态库,直接嵌入到你的程序里,彻底避免DLL缺失问题 add_library(glew STATIC ${GLEW_SOURCES}) # 让其他项目能找到GLEW的头文件 target_include_directories(glew PUBLIC include) # 链接OpenGL库,这是GLEW的必备依赖 find_package(OpenGL REQUIRED) target_link_libraries(glew PUBLIC OpenGL::GL) # 定义GLEW编译需要的宏,调试模式下开启调试标记 target_compile_definitions(glew PRIVATE GLEW_BUILD) if(CMAKE_BUILD_TYPE STREQUAL "Debug") target_compile_definitions(glew PRIVATE GLEW_DEBUG) endif()
3. 配置Project 1的CMakeLists.txt
打开Project 1里的CMakeLists.txt,改成下面的内容:
project(Project1) # 收集你项目里的所有源文件和头文件 file(GLOB PROJECT_SOURCES *.cpp *.h) # 生成可执行文件 add_executable(Project1 ${PROJECT_SOURCES}) # 把GLFW和GLEW链接到你的项目上 target_link_libraries(Project1 PRIVATE glfw glew) # 显式指定依赖头文件目录(其实通过上面的链接已自动包含,写出来更清晰) target_include_directories(Project1 PRIVATE ${CMAKE_SOURCE_DIR}/Dependencies/glfw/include ${CMAKE_SOURCE_DIR}/Dependencies/glew/include ) # 如果非要用动态库版本的GLEW,就取消下面注释,编译后自动把调试版DLL复制到输出目录 # if(CMAKE_BUILD_TYPE STREQUAL "Debug") # add_custom_command(TARGET Project1 POST_BUILD # COMMAND ${CMAKE_COMMAND} -E copy_if_different # $<TARGET_FILE:glew> # $<TARGET_FILE_DIR:Project1> # ) # endif()
4. 编译并验证
完成配置后,按照下面的步骤操作:
- 打开CMake-GUI,选择
root_project作为源代码目录,新建一个build目录作为编译输出目录 - 点击
Configure,选择Visual Studio 2017对应的版本(比如Visual Studio 15 2017 Win64) - 点击
Generate,生成Visual Studio解决方案 - 打开生成的
MyRootProject.sln,切换到Debug模式,编译整个解决方案 - 运行你的
Project1,这下应该不会再弹出找不到glew32d.dll的提示了!
为什么这样能解决问题?
咱们从源码编译GLEW的调试版本,要么把它编译成静态库直接嵌入到程序里,要么动态编译后自动把glew32d.dll复制到可执行文件的输出目录,这样Visual Studio调试时就能精准找到对应的DLL了。
内容的提问来源于stack exchange,提问作者ShadowDragon
相关产品推荐
相关产品推荐

