Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Opengl linux对基本函数的未定义引用_C++_Linux_Opengl - Fatal编程技术网

C++ Opengl linux对基本函数的未定义引用

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 并尝试运行该程序,该程序将导入

我在Ubuntu11.04上写了一个使用freeglut的程序。它工作得很好。然后我又买了一台电脑,试图在新安装的Ubuntu 11.04上运行这个程序。不起作用。所以我安装了

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