为什么这个GLUT程序不能编译?我错过了库或标题吗?

时间:2011-07-27 21:38:48

标签: linux opengl linker glut codeblocks

我刚开始使用Linux(Mint 11),最近,我决定将OpenGL编程作为一种爱好。我发现代码和技术相对简单,但是,我很难将所有资源放在正确的位置。代码是:

#include <stdlib.h>
#include <stdio.h>
#include <GL/glew.h>
#ifdef __APPLE__
#  include <GLUT/glut.h>
#else
#  include <GL/glut.h>
#endif

static int make_resources(void)
{
    return 1;
}

static void update_fade_factor(void)
{
}

static void render(void)
{
    glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);
    glutSwapBuffers();
}


int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
    glutInitWindowSize(400, 300);
    glutCreateWindow("Hello World");
    glutDisplayFunc(&render);
    glutIdleFunc(&update_fade_factor);
        glewInit();
    if (!GLEW_VERSION_2_0) {
        fprintf(stderr, "OpenGL 2.0 not available\n");
        return 1;
    }
      if (!make_resources()) {
        fprintf(stderr, "Failed to load resources\n");
        return 1;
    }

    glutMainLoop();
    return 0;
}

编译时,我收到以下消息

../../Libraries/glut-3.7/lib/glut/libglut.so||undefined reference to `glXQueryChannelRectSGIX'|
../../Libraries/glut-3.7/lib/glut/libglut.so||undefined reference to `glXChannelRectSyncSGIX'|
../../Libraries/glut-3.7/lib/glut/libglut.so||undefined reference to `glXChannelRectSGIX'|
../../Libraries/glut-3.7/lib/glut/libglut.so||undefined reference to `glXQueryChannelDeltasSGIX'|
../../Libraries/glut-3.7/lib/glut/libglut.so||undefined reference to `glXBindChannelToWindowSGIX'|
||=== Build finished: 5 errors, 0 warnings ===|

在线观看告诉我,我可能没有包含正确的库(可能是libX),但是我不确定我在哪里可以找到它们,如果它们甚至是正确的库。我已经尝试连接/usr/lib/X86_64-linux-gnu/libX11.so,/ usr / lib / X11既不包含库文件也不包含/ lib目录,我确定已经安装了lib11-dev软件包。我究竟做错了什么?

信息:
操作系统:Linux Mint 11
IDE:Code :: blocks 10.05
遵循this教程。 注意:我找不到它引用的x11r6目录。

2 个答案:

答案 0 :(得分:3)

确保已经安装了libglew-dev和freeglut3-dev

sudo apt-get install libglew-dev freeglut3-dev

然后使用

链接到Makefile中的libs或编译命令
-lglut -lGLEE

例如

g++ -lglut -lGLEW -o test main.cpp

(这是我编写你的例子的方式)

答案 1 :(得分:1)

在Linux中,您不指定要链接到的库文件的路径,而只指定库名称。链接器知道要在库中查找的路径列表。库也包含对所需的所有其他库的引用。要编译/链接GLUT程序,以下命令行通常就足够了

gcc -o ${BINARY} ${SOURCE_FILES_OR_OBJECTS} -lglut