在Ubuntu 13.10上安装OpenGL

时间:2014-02-13 05:25:41

标签: c++ opengl ubuntu makefile

我是一名大学生,正在尝试使用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

我想我可能会遗漏某些图书馆或其他东西。

1 个答案:

答案 0 :(得分: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}