Windows系统CLion配置OpenGL&GLUT后运行报错求助
解决OpenGL/GLUT项目CMake构建失败问题
嘿,咱们一步步来解决这个问题——从错误信息来看,核心是DLL文件复制路径出错,另外你的CMake配置还有几处可以优化的地方,具体如下:
一、先搞定DLL复制失败的核心问题
错误提示Error copying file "LW1/OpenGL/dll/glut32.dll" to ...,这是因为你用了相对路径,但CMake的工作目录和你预想的不一致,导致找不到文件。
- 修正路径写法:用CMake内置的
CMAKE_CURRENT_SOURCE_DIR变量获取项目根目录的绝对路径,不管构建目录在哪都能准确定位到DLL。把add_custom_target那行改成:
add_custom_target(glutdlllib COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/OpenGL/dll/glut32.dll ${CMAKE_BINARY_DIR} )
- 确认文件存在:一定要确保
${CMAKE_CURRENT_SOURCE_DIR}/OpenGL/dll/这个目录下确实有glut32.dll,如果你的DLL放在了其他位置,对应调整路径即可。
二、清理CMake里的冗余链接配置
你的CMakeLists里有重复的链接指令,而且库的命名可能和环境不匹配:
- 你已经定义了
OpenGlLibs变量包含glut32,但后面又加了target_link_libraries(LW1 -lOpenGL32 -lfreeGLUT),这会导致重复链接甚至冲突,直接删掉这一行。 - 如果你用的是MinGW环境,GLUT的标准库名是
freeglut而非glut32(现在大部分环境用的都是freeGLUT),所以把OpenGlLibs修改为:
set(OpenGlLibs glu32 opengl32 freeglut)
(如果你的GLUT是旧版的glut32,就保留glut32,但更推荐用freeGLUT)
三、优化头文件与库文件路径配置
include_directories是用来指定头文件(.h)目录的,你加了OpenGL/lib完全没必要,库文件路径应该用link_directories来指定:
- 添加库文件路径:
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/OpenGL/lib)
- 删掉多余的
include_directories(OpenGL/lib),避免混淆。
四、代码层面的小优化
你的main.cpp里包含了<glaux.h>,但代码里并没有用到glaux库的功能,删掉这行可以减少不必要的依赖:
// 删掉这一行 #include <GL/glaux.h>
修改后的完整CMakeLists.txt
project(LW1) set(CMAKE_CXX_STANDARD 17) # 指定头文件目录 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/OpenGL/include) # 指定库文件目录 link_directories(${CMAKE_CURRENT_SOURCE_DIR}/OpenGL/lib) # 复制GLUT DLL到构建目录 add_custom_target(glutdlllib COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/OpenGL/dll/glut32.dll ${CMAKE_BINARY_DIR} ) # 链接的库列表(根据GLUT版本调整freeglut/glut32) set(OpenGlLibs glu32 opengl32 freeglut) # 生成可执行文件并链接库 add_executable(LW1 main.cpp) target_link_libraries(LW1 ${OpenGlLibs}) add_dependencies(LW1 glutdlllib)
做完这些修改后,重新构建项目应该就能解决问题了。
内容的提问来源于stack exchange,提问作者anichaaa
相关产品推荐
相关产品推荐

