2014-02-13 182 views
-1

我是一名大学生,尝试使用Ubuntu 13.10为OpenGL开发设置我的家庭桌面。我已经安装了所有these库。我们的第一项任务是编写一个简单的程序和一个通用的makefile,它可以用于本学期的其余部分。这在校园里的计算机实验室完美运行。在Ubuntu 13.10上安装OpenGL

我的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(); 
} 

我的生成文件:

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 [email protected] 

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

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

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

当试图编译我家的桌面上我得到这些erors:

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

this question解释,你需要引用它们在连接器命令的对象后指定依赖库:

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

我不是生成文件语法的专家,但我想改变像这样的makefile中的'all'部分可能会工作:

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

它的工作谢谢你。我不认为这将是问题,因为这个确切的makefile在计算机实验室工作。 –

+0

很高兴知道它的工作!行为上的差异可能是由于不同的编译器版本或环境变量造成的。 –