【问题标题】:Installing OpenGL on Ubuntu 13.10在 Ubuntu 13.10 上安装 OpenGL
【发布时间】:2014-02-13 05:25:40
【问题描述】:

我是一名大学生,尝试使用 Ubuntu 13.10 设置我的家庭桌面以进行 OpenGL 开发。我已经安装了所有 these 库。我们的第一个任务是编写一个简单的程序和一个通用的 makefile,它可以在本学期的剩余时间内工作。这在校园的计算机实验室中非常有效。

我的 main.c 文件:

# include <GL/glut.h>

void display();

int main (int argc, char ** argv)
{
  glutInit(&argc , argv);
  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH );
  glutInitWindowSize(640 , 480) ;
  glutCreateWindow("Practical 1");
  glutDisplayFunc(display);
  glutMainLoop();
  return 0;
}

void display()
{
  glClearColor(0.0 , 0.0 , 1.0 , 1.0);
  glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
  glFlush();
  glutSwapBuffers();
}

还有我的makefile:

STUDENT_NUMBER = 1234567890
TASK = practical
NUMBER =1

OBJECTS=$(addsuffix .o,$(basename $(shell ls *.C)))
WARNING_FLAGS = -Wall  -Wextra -Weffc++ -Winit -self -Wmissing -include -dirs -Wswitch -default -Wswitch -enum -Wunused -parameter -Wstrict -overflow=5 -Wfloat -equal -Wshadow -Wc++0x -compat -Wconversion -Wsign -conversion-Wmissing -declarations -Wstrict -null -sentinel -Woverloaded -virtual -Wsign -promo -Werror -pedantic -Wcast -qual
FORMATTING_FLAGS = -fno  -pretty -templates -fmessage -length=80 -fdiagnostics -show -option
CFLAGS = ${WARNING_FLAGS} ${FORMATTING_FLAGS} g -std=c++0x -pipe -frepo
LDLIBS = -lGL -lglut -lGLEW -lGLU -lX11 -lXi -lm -lrt -lpng
LDFLAGS =
CC = g++
TARGET = main

all: ${OBJECTS}
    ${CC} ${LDFLAGS} ${LDLIBS} $^ -o ${TARGET}

%.o: %.c
    ${CC} ${CFLAGS} -c ${LDFLAGS} $< -o $@

makefile.dep: *.[Ch]
    for i in *.C; do gcc -MM "$${i}"; done > $@
include makefile.dep

clean:
    rm ${OBJECTS} *.rpo *.gch makefile.dep ${TARGET}

tar:
    make clean; tar -cvjf ${STUDENT_NUMBER}_${TASK}_${NUMBER}.tar.bz2 *

尝试在我的家庭桌面上编译时出现以下错误:

g++  -lGL -lglut -lGLEW -lGLU -lX11 -lXi -lm -lrt -lpng main.o -o main
main.o: In function `main':
main.C:(.text+0x1e): undefined reference to `glutInit'
main.C:(.text+0x28): undefined reference to `glutInitDisplayMode'
main.C:(.text+0x37): undefined reference to `glutInitWindowSize'
main.C:(.text+0x41): undefined reference to `glutCreateWindow'
main.C:(.text+0x4b): undefined reference to `glutDisplayFunc'
main.C:(.text+0x50): undefined reference to `glutMainLoop'
main.o: In function `display()':
main.C:(.text+0x76): undefined reference to `glClearColor'
main.C:(.text+0x80): undefined reference to `glClear'
main.C:(.text+0x85): undefined reference to `glFlush'
main.C:(.text+0x8a): undefined reference to `glutSwapBuffers'
collect2: error: ld returned 1 exit status
make: *** [all] Error 1

我想我可能缺少一些图书馆或其他东西。

【问题讨论】:

    标签: c++ opengl ubuntu makefile


    【解决方案1】:

    this question 中所述,您需要在链接器命令中引用它们的对象之后指定依赖库:

    g++ main.o -lGL -lglut -lGLEW -lGLU -lX11 -lXi -lm -lrt -lpng -o main
    

    我不是 makefile 语法方面的专家,但我认为像这样更改 makefile 的“all”部分可能会奏效:

    all: ${OBJECTS}
        ${CC} ${LDFLAGS} $^ ${LDLIBS} -o ${TARGET}
    

    【讨论】:

    • 成功了,谢谢。我不认为这会是问题,因为这个确切的 makefile 在计算机实验室工作。
    • 很高兴知道它有效!行为上的差异可能是由于不同的编译器版本或环境变量...
    猜你喜欢
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 2013-11-24
    • 2014-07-11
    • 2013-11-01
    相关资源
    最近更新 更多