【发布时间】: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 头文件的路径是什么?您的错误只能由其中一项或多项错误引起,但您没有在问题中说明它们是什么。