Opengl linux未定义的基本function参考

我在Ubuntu 11.04上写了一个使用freeglut的程序。 它工作正常。 然后,我又拿到另外一台电脑,并尝试在全新安装的Ubuntu 11.04上运行该程序。 不起作用。 所以我安装了

sudo apt-get install freeglut3 freeglut3-dev libglew1.5 libglew1.5-dev libglu1-mesa libglu 1-mesa-dev libgl1-mesa-glx libgl1-mesa-dev mesa-common-dev gcc

并试图运行该程序,即import

 #include <GL/freeglut.h> #include <GL/gl.h> #include <GL/glu.h> 

使用该命令

g++ -lGL -lGLU -lglut Driver.cpp -oa

然而,链接器或任何吐出来的forms200错误:

 Driver.cpp:(.text+0x3c6b): undefined reference to `glutSolidSphere' Driver.cpp:(.text+0x3c75): undefined reference to `glEnable' Driver.cpp:(.text+0x3c9a): undefined reference to `glColor4f' Driver.cpp:(.text+0x3cb5): undefined reference to `glRotatef' Driver.cpp:(.text+0x3d02): undefined reference to `glutSolidSphere' Driver.cpp:(.text+0x3d07): undefined reference to `glutSwapBuffers' 

问题的原因是什么?

Solutions Collecting From Web of "Opengl linux未定义的基本function参考"

指定要链接到的对象(包括静态和动态库)的顺序可能很重要。

试试:

 g++ Driver.cpp -lGL -lGLU -lglut -oa 

(不知道这些库的顺序,但看起来没问题。)

构建命令行的想法是,如果a需要来自b的符号,则b必须出现命令行中的b 之后

链接顺序问题发生(或不)与GCC / ld共享库取决于(最有可能的其他事情 – 我不是这里的专家)是否--as-needed链接标志设置或不。 (例如,参见Gentoo 根据需要的转换指南中的前一个项目。)
链接过程在--as-needed激活时尽快消除不需要的符号,如果链接顺序不正确,则会导致问题。 这样做是为了减少最终可执行文件中不必要的依赖项的数量。
这不会发生(或更少)如果--as-needed是不活跃的 – 所有符号保存在这种情况下,链接顺序并不重要(或多或少 – 再次,我不是专家。 )

由于不同的发行版对该标志使用不同的默认值,因此GCC的行为可能看起来不一致,但这只是一个印象。