C++ Opengl linux对基本函数的未定义引用
我在Ubuntu11.04上写了一个使用freeglut的程序。它工作得很好。然后我又买了一台电脑,试图在新安装的Ubuntu 11.04上运行这个程序。不起作用。所以我安装了C++ Opengl linux对基本函数的未定义引用,c++,linux,opengl,C++,Linux,Opengl,我在Ubuntu11.04上写了一个使用freeglut的程序。它工作得很好。然后我又买了一台电脑,试图在新安装的Ubuntu 11.04上运行这个程序。不起作用。所以我安装了 sudo apt get安装freelut3 freelut3 dev libglew1.5 libglew1.5-dev libglu1 mesa libglu1-mesa-dev libgl1 mesa glx libgl1 mesa dev mesa common dev gcc 并尝试运行该程序,该程序将导入
sudo apt get安装freelut3 freelut3 dev libglew1.5 libglew1.5-dev libglu1 mesa libglu
1-mesa-dev libgl1 mesa glx libgl1 mesa dev mesa common dev gcc
并尝试运行该程序,该程序将导入
#include <GL/freeglut.h>
#include <GL/gl.h>
#include <GL/glu.h>
问题的原因是什么?指定要链接到的对象(包括静态和动态库)的顺序可能很重要 尝试:
g++ Driver.cpp -lGL -lGLU -lglut -o a
(不确定LIB的顺序,但看起来还可以。)
构建命令行时的想法是,如果a
需要b
中的符号,b
必须出现在命令行中a
之后
共享库的GCC/ld会出现(或不会出现)链接顺序问题,这取决于(最有可能的是——我在这里不是专家)是否设置了--as needed
链接标志。(例如,请参见Gentoo《过渡指南》中的前一项。)
当--as needed
处于活动状态时,链接过程会尽快消除不需要的符号,如果链接顺序不“正确”,则会导致问题。这样做是为了减少最终可执行文件中不必要的依赖项的数量。如果
--根据需要未处于活动状态,则不会发生这种情况(或不太可能发生),所有符号都保留在这种情况下,链接顺序也不重要(或多或少,我不是专家)
由于不同的发行版对该标志使用不同的默认值,GCC的行为可能看起来不一致,但这只是一种印象。如果使用GCC编译,为什么源文件命名为.cpp?如果是C++,则必须用G++编译,如果是C,则必须在帖子中称为“.c.Type”。我用的是g++这个Driver.cpp是什么?你是从program.cpp中包括它的吗?试着在编译时把库放在源文件之后。这又是一个打字错误。敏锐的眼光。这通常是静态链接库的问题。我不知道是什么导致了共享库的问题,事实就是如此。
g++ Driver.cpp -lGL -lGLU -lglut -o a