【问题标题】:OpenGL is present in the minGW folder, but CLion can't reach/see it [closed]OpenGL 存在于 minGW 文件夹中,但 CLion 无法访问/看到它[关闭]
【发布时间】:2023-03-14 05:15:01
【问题描述】:

我试图让 OpenGL 在 CLion 中工作,从 freeglut 下载 bin/include/library 文件并将它们复制到 minGW。它们在那里,并且 CLion 在编译时正在使用该 minGW 文件夹,但是当它尝试编译 freeglut 提供的测试代码时,它返回“致命错误:GL/glut.h:没有这样的文件或目录#include <GL/glut.h>

我已经尝试了不同版本的 CMakeLists,它们都返回相同的问题。如果我复制项目旁边的 GL 文件夹,我会得到大量未定义的引用。

在尝试了这个 CMakeList 之后,我得到了同样的错误。 (来自Running Opengl program with CLion IDE

cmake_minimum_required(VERSION 3.14)
project(gltest)

set(CMAKE_CXX_STANDARD 14)
set (CMAKE_CXX_FLAGS "-lglut")
set (CMAKE_CXX_FLAGS "-lGL")
set (CMAKE_CXX_FLAGS "-lGLU")
include_directories(GL/)

add_executable(gltest Callbacks.c HelloGLUT.c)

target_link_libraries(gltest -lglut -lGL -lGLU)

更新

使用新的 CMakeList 后(如 cmets 中所建议的,我非常感谢这里的好人)我遇到了一些新错误,但 CLion 现在似乎可以访问 GL 库了。

CMakeList:

cmake_minimum_required(VERSION 3.14)
project(gltest)

set(SOURCE_FILES Callbacks.c HelloGLUT.c)
set(OPENGL_INCLUDE_DIR C:/minGW/mingw64/include)
set(OPENGL_LIBRARY C:/minGW/mingw64/lib)

find_package(OPENGL REQUIRED)

add_executable(gltest ${SOURCE_FILES})
include_directories(${OPENGL_INCLUDE_DIR})
target_link_libraries(gltest ${OPENGL_LIBRARY} )

错误: CMakeFiles\gltest.dir/objects.a(Callbacks.c.obj): In function "glutInit_ATEXIT_HACK': C:/minGW/mingw64/include/GL/freeglut_std.h:637: undefined reference to "__imp___glutInitWithExit" CMakeFiles\gltest.dir/objects.a(Callbacks.c.obj): In function "glutCreateWindow_ATEXIT_HACK": 以及以相同方式对各种“__imp___glut”函数的更多未定义引用。有什么想法吗?

如果我使用target_link_libraries(gltest ${OPENGL_LIBRARY} glut GL GLU) 我得到 "C:/minGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe : 找不到 -lglut " , lGL 和 lGLU 一样

【问题讨论】:

  • ${OPENGL_gl_LIBRARY}${OPENGL_glu_LIBRARY}不匹配是故意的吗?
  • 我从这里 alexwidener.com/opengl-with-cmake.html 复制了它,因为我认为如果我看到一些关于正在发生的事情的实际反馈,它会派上用场,所以我想这是故意的(我对制作 CMake 还是很陌生) .现在我尝试了另一个 CMakeList,它给出了同样的错误。
  • OPENGL_gl_LIBRARY 是一个遗留的东西,它可能不存在吗? cmake.org/cmake/help/v3.10/module/FindOpenGL.html
  • "将它们复制到 minGW" - 您应该将它们复制到其他地方,然后指定它们的位置。
  • 我不是专家,但显而易见的问题是${OPENGL_INCLUDE_DIR} 的值是什么以及放置 OpenGL 头文件的路径是什么?您的错误只能由其中一项或多项错误引起,但您没有在问题中说明它们是什么。

标签: c++ opengl cmake clion


【解决方案1】:

遇到同样错误的人的解决方案

确保您遵循自述文件并将 freeglut 安装在 mingw 内的不同文件夹中(对我来说,它是 C:/minGW/mingw64/freeglut)并在那里复制 freeglut 的包含和库。确保你有一个 FindFREEGLUT.cmake 文件(我从 https://git.omkov.net/Jamozed/Chip8Emulator/releases 中提取了我的文件,如果你有一个只有 FindFREEGLUT.cmake 的下载文件,请随意发布)。将 FindFREEGLUT.cmake 复制到项目目录中,例如“C:/CLionProjects/gltest/cmake/FindFREEGLUT.cmake”。在此之后,我使用了以下 CMakeLists.txt

cmake_minimum_required(VERSION 3.14)
project(gltest)

set(SOURCE_FILES Callbacks.c HelloGLUT.c)
set(GLUT_INCLUDE_DIR "C:/minGW/mingw64/freeglut/include")
set(OPENGL_LIBRARY_DIR "C:/minGW/mingw64/freeglut/lib")

# GLUT
find_package(GLUT REQUIRED)
include_directories(${GLUT_INCLUDE_DIR})
if(NOT GLUT_FOUND)
    message(ERROR "GLUT not found!")
endif(NOT GLUT_FOUND)

# OpenGL
find_package(OpenGL REQUIRED)
include_directories(${OpenGL_INCLUDE_DIRS})
if(NOT OPENGL_FOUND)
    message(ERROR "OPENGL not found!")
endif(NOT OPENGL_FOUND)


add_executable(gltest ${SOURCE_FILES})
target_link_libraries(gltest ${OPENGL_LIBRARIES} ${GLUT_LIBRARY})

【讨论】:

  • Add additional information at your question 请。这没有回答你的问题。
  • @πάνταῥεῖ 的回复是对此评论的旧版本(当我仍然不知道您不应该在单独的 cmets 中发布更新时,我发布了该评论,抱歉我是新手:) ) . 新评论有效。
猜你喜欢
  • 2011-05-16
  • 1970-01-01
  • 2011-07-15
  • 2017-08-19
  • 1970-01-01
  • 2018-07-28
  • 1970-01-01
  • 2021-07-15
  • 2012-05-20
相关资源
最近更新 更多