2013-03-04 56 views
4

我正在Linux Mint的14.1 64位FreeGLUT链接问题在Linux中

我已经安装了下列库:

台面常见-dev的, freeglut3-dev的, libglew-dev的

通过apt-get工具。

这里是我的包括位于我Main.h文件:

#include <cmath> 
#include <cstdlib> 
#include <iostream> 
#include <stdio.h> 

#include <GL/glew.h> 
#include <GL/glut.h> 
#include <time.h> 

我检查了装库正确,他们似乎是位于/usr/lib中/ x86_64的,Linux的GNU/usr/include目录/ GL

我开始编译我MAIN.C文件有以下标志的标题:

g++ -Wall -Wextra -Weffc++ -Winit-self -Wmissing-include-dirs -Wswitch-default -switch-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 -fno-pretty-templates -fmessage-length=80 -fdiagnostics-show-option -g -std=c++0x -pipe -frepo -c Main.C -o Main.o 

Main.o没有任何问题的产生,然后我尝试创建二进制:

g++ -I/usr/include -L/usr/lib/x86_64-linux-gnu -lGL -lglut -lGLU -lGLEW -lX11 -lm -lrt -lpng Main.o -o main 

而且收到以下错误:

Main.o: In function `init()': 
/path/to/Main.C:12: undefined reference to `glClearColor' 
Main.o: In function `initGLUT(int, char**)': 
/path/to/Main.C: undefined reference to `glutInit' 
/path/to/Main.C:21: undefined reference to `glutInitDisplayMode' 
/path/to/Main.C:24: undefined reference to `glutInitWindowSize' 
/path/to/Main.C:25: undefined reference to `glutCreateWindow' 
/path/to/Main.C:28: undefined reference to `glutDisplayFunc' 
/path/to/Main.C:31: undefined reference to `glutKeyboardFunc' 
/path/to/Main.C:34: undefined reference to `glutMouseFunc' 
/path/to/Main.C:37: undefined reference to `glutReshapeFunc' 
/path/to/Main.C:40: undefined reference to `glutIdleFunc' 
Main.o: In function `printFPS()': 
/path/to/Main.C:96: undefined reference to `glutGet' 
Main.o: In function `reshape(int, int)': 
/path/to/Main.C:123: undefined reference to `glutPostRedisplay' 
Main.o: In function `getTime()': 
/path/to/Main.C:129: undefined reference to `glutGet' 
Main.o: In function `idle()': 
/path/to/Main.C:141: undefined reference to `glutPostRedisplay' 
Main.o: In function `display()': 
/path/to/Main.C:148: undefined reference to `glClearColor' 
/path/to/Main.C:149: undefined reference to `glClear' 
/path/to/Main.C:150: undefined reference to `glFlush' 
/path/to/Main.C:151: undefined reference to `glutSwapBuffers' 
Main.o: In function `main': 
/path/to/Main.C:164: undefined reference to `glutMainLoop' 

的程序编译和链接在另一个Linux系统上。 我可能会错过什么?

+0

你为什么''include'ing '和'',但随后''和''? – BoBTFish 2013-03-04 14:26:33

回答

7

你要通过库最后一个(目标文件后)

g++ -I/usr/include -L/usr/lib/x86_64-linux-gnu Main.o \ 
    -lGL -lglut -lGLU -lGLEW -lX11 -lm -lrt -lpng -o main 

这背后的原因是,连接器只链接符号,是当前未定义。如果你在对象文件之前传递库,那么没有任何未定义的符号被链接,因此编译/链接将失败。

2

的库需要拿出你的目标文件后:

g++ -I/usr/include -L/usr/lib/x86_64-linux-gnu Main.o -lGL -lglut -lGLU -lGLEW -lX11 -lm -lrt -lpng -o main