如何解决运行时符号查找错误?

时间:2015-07-09 09:38:18

标签: opengl ubuntu-14.04 glew undefined-symbol

我一直在做一个宠物项目,我最近遇到了运行时符号查找错误。由于错误本身并没有提供太多信息,我不知道如何解决它。

我正在使用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认为这是一个实际的解决方案,我将在此问题返回时发布。

1 个答案:

答案 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。

解决方案:

  • 检查您的GPU不是由英特尔制造的(只有英特尔GPU的Mesa驱动程序)
  • 检查您的GPU是否支持OpenGL-4.5
  • 下载该GPU的最新专有驱动程序并安装