【问题标题】:Why won't this GLUT program compile? Am I missing libraries or headers?为什么这个 GLUT 程序不能编译?我是否缺少库或标题?
【发布时间】:2011-07-28 06:10:17
【问题描述】:

我刚开始使用 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: 代码::blocks 10.05
关注this 教程。 注意:我找不到它所指的 x11r6 目录。

【问题讨论】:

  • 如果你提供了一个用于编译和链接的命令就好了。
  • 我只是在 code::blocks 中使用“build”选项。但是,我不确定如何在这个 IDE 中找到发布给编译器的内容,但如果有帮助,我会先创建一个空白项目,然后在构建设置中将其更改为“GUI 应用程序”。我添加了 libGL、libGLU、libGLEW、libGLUT 和 /usr/lib/x86_64-linux-gnu/libX11.so。编译器选项显示除了抑制警告的选项之外没有检查其他选项。

标签: linux opengl linker glut codeblocks


【解决方案1】:

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

sudo apt-get install libglew-dev freeglut3-dev

然后在你的 Makefile 中链接到这个库或使用编译命令

-lglut -lGLEE

例如

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

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

【讨论】:

  • 在代码块上这样做:右键单击项目->构建选项->在左上角选择您的项目名称(不仅仅是目标)->链接器设置选项卡->单击添加->将“glut”和“GLEW”添加到链接器
  • 好吧,这似乎使它工作(添加 -lglut 和 -lGLEW)。我之前编译并安装了常规的非 GNU GLUT,这是产生问题的原因吗?
  • 可能,不知道你先安装了什么,可能库是旧的或新的或其他。最好先尝试通过包管理器提供的库。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多