undefined reference to symbol ‘__glewDeleteBuffers’
//usr/lib/x86_64-linux-gnu/libGLEW.so.2.0: error adding symbols: DSO missing from command line
在编译涉及OpenGL和GLEW(OpenGL Extension Wrangler Library)的项目时遇到“undefined reference to symbol ‘__glewDeleteBuffers’”错误,这通常意味着链接器没有找到GLEW库。错误信息“DSO missing from command line”进一步指出,编译命令行缺少了必要的动态共享对象(Dynamic Shared Object, DSO)或库。
在CMakeLists.txt文件中解决链接GLEW库和OpenGL库的问题,你需要确保find_package命令用于查找这些库,并且在目标链接库列表中使用target_link_libraries命令添加它们。这里是一个简单的示例,演示如何在CMakeLists.txt文件中配置项目以使用GLEW和OpenGL:
首先,确保你的CMakeLists.txt文件中包含必要的find_package调用来找到GLEW和OpenGL。CMake通常能够自动找到这些库,如果它们已经被正确安装在你的系统上。
cmake_minimum_required(VERSION 3.0)
project(MyOpenGLProject)
# 查找OpenGL库
find_package(OpenGL REQUIRED)
# 查找GLEW库
find_package(GLEW REQUIRED)
# 如果你的项目包含多个源文件,可以使用file(GLOB ...)命令来自动收集所有源文件
# file(GLOB SOURCES "*.cpp")
# 指定一个可执行文件目标
add_executable(${PROJECT_NAME} example.cpp) # 或者 ${SOURCES} 如果你使用了file(GLOB ...)
# 包含GLEW和OpenGL的头文件目录
include_directories(${GLEW_INCLUDE_DIRS} ${OPENGL_INCLUDE_DIR})
# 链接GLEW和OpenGL库
target_link_libraries(${PROJECT_NAME} ${GLEW_LIBRARIES} ${OPENGL_LIBRARIES})
这个CMakeLists.txt文件做了以下几件事情:
使用find_package命令查找系统上的GLEW和OpenGL库。
使用add_executable命令创建一个可执行文件目标,假设你的主源文件名为example.cpp。
使用include_directories命令添加GLEW和OpenGL头文件的包含路径,这样编译器就可以找到这些库的头文件。
使用target_link_libraries命令将GLEW和OpenGL库链接到你的可执行文件目标上。
请注意,如果GLEW或OpenGL库安装在非标准路径下,你可能需要在调用find_package之前设置CMAKE_MODULE_PATH变量或者提供GLEW和OpenGL的路径提示。这通常不必要,除非你的环境配置有特殊之处。
此外,如果你的项目还使用了其他库(例如GLUT,GLFW等),你可以以类似的方式查找并链接这些库。
最后,运行CMake来生成构建系统配置文件(例如Makefile或Visual Studio项目文件),然后使用相应的构建系统工具(例如make或Visual Studio)来编译和链接你的项目。