我一直在做一个宠物项目,我最近遇到了运行时符号查找错误。由于错误本身并没有提供太多信息,我不知道如何解决它。
我正在使用Eclipse Mars。
我包含以下标题:
#include <GL/glew.h> //glew-1.12.0
#include <GLFW/glfw3.h> //glfw-3.1.1
#include <iostream>
#include <fstream>
#include <algorithm>
#include <math.h>
构建项目时,我的控制台输出看起来很正常。
12:05:00 **** Incremental Build of configuration Debug for project Game ****
make all
Building file: ../main.cpp
Invoking: Cross G++ Compiler
g++ -I/usr/include/libdrm -I/usr/local/include -O0 -g3 -Wall -c - fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.d" -o "main.o" "../main.cpp"
Finished building: ../main.cpp
Building target: Game
Invoking: Cross G++ Linker
g++ -L/usr/local/lib -o "Game" ./main.o -lGL -lGLEW -lGLU -lglfw3 -lX11 -lXcursor -lXi -lXinerama -lXrandr -lXxf86vm -lpthread
Finished building target: Game
12:05:01 Build Finished (took 567ms)
但是当我尝试运行它时,我收到以下错误:
/home/lokko/git/buum/Game/Debug/Game: symbol lookup error:/home/lokko/git/buum/Game/Debug/Game: undefined symbol: __glewClipControl
我是一个业余爱好者程序员,而且我知道自己已经学会了所以如果anwser尽可能清楚地了解我需要做些什么来实现这个目标会更好。导致问题的具体功能是
glClipControl(GLenum origin,GLenum depth);
编辑: 我在Nvidia 840m上运行opengl 4.5并使用专有的Nvidia驱动程序。 (349)
解决方案:
所以一切都在我上次Ubuntu更新后开始工作。不要t know what it was. The last update before that was less than 24 hours ago. I wouldn
认为这是一个实际的解决方案,我将在此问题返回时发布。
答案 0 :(得分:2)
您遇到的问题是,OpenGL必须符合以下类别:OS ABI定义的符号,这些符号和功能被声明为可用于运行在上的任何 OpenGL实现系统(对于Windows,这是OpenGL-1.1,对于Linux LSB4 OpenGL-1.2和最近发布的LSB5,它是OpenGL-2.1)。
除了声称可用ABI之外的任何可能不可用,必须首先测试是否存在,然后在运行时通过OpenGL扩展机制加载。这涵盖的核心OpenGL版本高于ABI中指定的版本,但也包含特定于供应商的扩展。在您的情况下,glClipControl
是OpenGL-4.5引入的一个函数(在撰写本文时,这是最高的OpenGL版本)。
因此,为了使这个功能可用,你需要一个相当新的GPU(好吧,在2012年之后由AMD和NVidia构建的应该可以做到这一点)和你需要该GPU的最新驱动程序。 / p>
该错误告诉您,您的GPU或OpenGL实现不支持您要使用的功能。
现在,如果是普通的Linux,你可能会使用Mesa驱动程序(到目前为止只能使用OpenGL-3.x; OpenGL-4.x支持最终会在那里)或者一个相当过时的供应商专有驱动程序,不支持OpenGL-4.5。
解决方案: