在OpenGL中使用freeglut链接错误
Linking error in OpenGL using freeglut in CLion
所以,我使用freeglut尝试做一些openGL的东西,但我不断得到错误说引用是未定义的:
CMakeFilestexture_mapping.dir/objects.a(TextureMapper.cpp.obj): In function `ZN13TextureMapper4initEv':
.../TextureMapper.cpp:20: undefined reference to `glClearColor@16'
.../TextureMapper.cpp:23: undefined reference to `glMatrixMode@4'
.../TextureMapper.cpp:24: undefined reference to `glLoadIdentity@0'
.../TextureMapper.cpp:25: undefined reference to `glOrtho@48'
CMakeFilestexture_mapping.dir/objects.a(TextureMapper.cpp.obj): In function `ZN13TextureMapper7displayEv':
.../TextureMapper.cpp:45: undefined reference to `glClear@4'
...TextureMapper.cpp:48: undefined reference to `glColor3f@12'
...TextureMapper.cpp:49: undefined reference to `glBegin@4'
...TextureMapper.cpp:52: undefined reference to `glVertex3f@12'
...TextureMapper.cpp:53: undefined reference to `glVertex3f@12'
...TextureMapper.cpp:54: undefined reference to `glVertex3f@12'
...TextureMapper.cpp:55: undefined reference to `glVertex3f@12'
...TextureMapper.cpp:58: undefined reference to `glEnd@0'
...TextureMapper.cpp:61: undefined reference to `glFlush@0'
我使用MinGW与CLion做这个项目。我以为我做对了。我将适当的文件移动到MinGW中的include
文件夹,以及bin
文件夹和lib
文件夹。然后,我有这个在我的CMakeLists.txt
:
cmake_minimum_required(VERSION 3.3)
project(texture_mapping)
find_package(OpenGL REQUIRED)
find_package(GLUT REQUIRED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp TextureMapper.cpp TextureMapper.h Vertex.h ObjParser.cpp ObjParser.h)
add_executable(texture_mapping ${SOURCE_FILES})
target_link_libraries(texture_mapping libfreeglut.a libfreeglut_static.a)
我链接的库是freeglut附带的唯一库文件。
那么,我错过了什么?在编译之前,CLion不会显示任何错误。我甚至可以进入freeglut提供的头文件中的函数。那么,为什么这些函数没有在我的程序中定义?
我一直在努力解决同样的问题,并通过将以下行添加到CMakeLists.txt:
find_package(OpenGL REQUIRED)
find_package(GLUT REQUIRED)
include_directories(${OPENGL_INCLUDE_DIRS} ${GLUT_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} ${OPENGL_LIBRARIES} ${GLUT_LIBRARY})
你实际上并没有将OpenGL链接到你的项目,所以你得到了对OpenGL函数的未定义引用。尝试替换
target_link_libraries(texture_mapping libfreeglut.a libfreeglut_static.a)
target_link_libraries(texture_mapping libfreeglut.a libfreeglut_static.a GL)
我用你的CMakeLists.txt
和以下程序重现了你的问题:
#include <GL/gl.h>
int main() {
glClear(GL_COLOR_BUFFER_BIT);
return 0;
}
,并通过上述替换解决。该解决方案自动从我的库路径链接GL库:
$ ls -1 /usr/lib64/libGL.*
/usr/lib64/libGL.la
/usr/lib64/libGL.so
/usr/lib64/libGL.so.1
/usr/lib64/libGL.so.1.0.0
根据这个,你有一些变量来访问你实际的OpenGL库。例如,你可以像这样直接指向OpenGL库文件:
target_link_libraries(texture_mapping libfreeglut.a libfreeglut_static.a ${OPENGL_gl_LIBRARY})
也可以将OpenGL库目录添加到库搜索路径中(在target_link_libraries
之前):
link_directories(${OPENGL_gl_LIBRARY})
重新排序CMakeLists.txt
对我有帮助(<name>
应该相应地替换):
cmake_minimum_required(VERSION 3.10)
project(<name>)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lGL -lGLU -lglut")
set(CMAKE_CXX_STANDARD 17)
add_executable(<name> main.cpp)
find_package(OpenGL REQUIRED)
find_package(GLUT REQUIRED)
include_directories(${OPENGL_INCLUDE_DIRS} ${GLUT_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} ${OPENGL_LIBRARIES} ${GLUT_LIBRARY})
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- CMake-按正确顺序将项目与C运行时对象文件链接
- 从链接列表c++中删除一个项目
- 有根的二进制搜索树.保留与其父级的链接
- 读取文件的最后一行并输入到链接列表时出错
- 静态数据成员的问题-修复链接错误会导致编译器错误
- node-gyp 在 macOS 上未正确链接库
- 基于boost的程序的静态链接——zlib问题
- 无法链接 CMake 中的本地库
- 内联函数中具有内部链接的全局变量
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 使用gcc从静态链接的文件中查找可选符号
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 为什么我需要FreeGLUT来编译和链接GLFW程序
- Visual Studio静态链接(FreeGlut,Glew)
- 未定义对Base::object链接器错误@c++w/freeglut的引用
- 在Linux中将freeglut与Qt Creator链接
- 在OpenGL中使用freeglut链接错误
- Linux中的FreeGLUT链接问题