2013-03-04 14 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