La compilation de GCC a des références indéfinies malgré une liaison Ubuntu auparavant fonctionnelle
il semble que je ne peux plus compiler mon code dans GCC post Ubuntu 11.10 mise à jour, en dépit de liaison dans les bibliothèques avec-l. Compilation avec:
gcc-lm -lGL -lGLU -lglut T1.c
(Les deux bibliothèques, je suis tenté de faire le lien et se sont glut et mathématiques)
Toutes les bibliothèques et fichiers d'en-tête sont là où ils sont censés être (ils n'ont pas disparu partout, depuis la mise à jour) et j'ai vérifié tous mes pertinentes pour l'installation des paquets. En outre, voici mes variables d'environnement et ils semblent être dans l'ordre:
PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
C_INCLUDE_PATH=/usr/include
Je ne pense pas que c'est un problème avec le code que je ne suis pas en mesure de compiler des fichiers j'ai compilé avec succès hier. Mais je vais le lien de toute façon, juste au cas où:
#include <math.h>
#include <GL/glut.h>
const int WIDTH=640;
const int HEIGHT=480;
const float NEAR_CLIP=0.1f;
const float FAR_CLIP=100.0f;
const double INC_ROTATE=5;
double rotate=0;
void rotateObject() {
rotate+=INC_ROTATE;
}
void update() {
//rotateObject();
}
void drawAxes() {
double x = 1.5, y = 1.5, z = 1.5;
glLineWidth(4);
glBegin(GL_LINES);
glColor3d(1,0,0);
glVertex3d(0,0,0);
glVertex3d(x,0,0);
glColor3d(0,1,0);
glVertex3d(0,0,0);
glVertex3d(0,y,0);
glColor3d(0,0,1);
glVertex3d(0,0,0);
glVertex3d(0,0,z);
glEnd();
glLineWidth(1);
}
void render() {
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
gluLookAt(1.2,1.0,2.5,0.0,0.0,0.0,0.0,1.0,0.0);
drawAxes();
glColor3d(1,1,1);
glRotated(rotate,0,0,1);
glutWireCube(1);
}
void display() {
update();
render();
}
void reshape(int width, int height) {
float fAspect=0;
float fovy=(M_PI/3);
float top=tan(fovy*0.5)*NEAR_CLIP;
float bottom=top;
float left=fAspect*bottom;
float right=fAspect*top;
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(left,right,bottom,top,NEAR_CLIP, FAR_CLIP);
glMatrixMode(GL_MODELVIEW);
}
int main(int argc, char **argv) {
glClearColor(0,0,0,1);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(320,320);
glutCreateWindow("T1");
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutIdleFunc(display);
glutMainLoop();
return 1;
}
Messages d'erreur:
T1.c:(.text+0x63): undefined reference to `glLineWidth'
T1.c:(.text+0x6d): undefined reference to `glBegin'
T1.c:(.text+0x82): undefined reference to `glColor3d'
T1.c:(.text+0x93): undefined reference to `glVertex3d'
T1.c:(.text+0xa5): undefined reference to `glVertex3d'
T1.c:(.text+0xba): undefined reference to `glColor3d'
T1.c:(.text+0xcb): undefined reference to `glVertex3d'
T1.c:(.text+0xe1): undefined reference to `glVertex3d'
T1.c:(.text+0xf6): undefined reference to `glColor3d'
T1.c:(.text+0x107): undefined reference to `glVertex3d'
T1.c:(.text+0x11d): undefined reference to `glVertex3d'
T1.c:(.text+0x122): undefined reference to `glEnd'
T1.c:(.text+0x12f): undefined reference to `glLineWidth'
/tmp/cc4VqRwQ.o: In function `render':
T1.c:(.text+0x143): undefined reference to `glClear'
T1.c:(.text+0x148): undefined reference to `glLoadIdentity'
T1.c:(.text+0x18a): undefined reference to `gluLookAt'
T1.c:(.text+0x1b1): undefined reference to `glColor3d'
T1.c:(.text+0x1ce): undefined reference to `glRotated'
T1.c:(.text+0x1db): undefined reference to `glutWireCube'
/tmp/cc4VqRwQ.o: In function `reshape':
T1.c:(.text+0x22e): undefined reference to `tan'
T1.c:(.text+0x28a): undefined reference to `glViewport'
T1.c:(.text+0x294): undefined reference to `glMatrixMode'
T1.c:(.text+0x299): undefined reference to `glLoadIdentity'
T1.c:(.text+0x2da): undefined reference to `glFrustum'
T1.c:(.text+0x2e4): undefined reference to `glMatrixMode'
/tmp/cc4VqRwQ.o: In function `main':
T1.c:(.text+0x30b): undefined reference to `glClearColor'
T1.c:(.text+0x31e): undefined reference to `glutInit'
T1.c:(.text+0x328): undefined reference to `glutInitDisplayMode'
T1.c:(.text+0x337): undefined reference to `glutInitWindowPosition'
T1.c:(.text+0x346): undefined reference to `glutInitWindowSize'
T1.c:(.text+0x350): undefined reference to `glutCreateWindow'
T1.c:(.text+0x35d): undefined reference to `glutDisplayFunc'
T1.c:(.text+0x367): undefined reference to `glutReshapeFunc'
T1.c:(.text+0x374): undefined reference to `glutIdleFunc'
T1.c:(.text+0x379): undefined reference to `glutMainLoop'
collect2: ld returned 1 exit status
Honnêtement, je n'ai aucune idée de pourquoi gcc ne peut pas trouver la source des fichiers. Toute aide que vous pourrait fournir serait grandement appréciée, merci d'avance.
EDIT:
Je suis en utilisant freeglut
Ajout de messages d'erreur
source d'informationauteur user975391 | 2011-10-14
Vous devez vous connecter pour publier un commentaire.
Je devine ld (l'éditeur de liens) a été modifié pour fonctionner un peu différemment.
Mettre vos bibliothèques après le fichier source
Ou
apt-get install binutils-gold
, apparemment, les nouvelles de l'or de l'éditeur de liens traitera toujours dépendant des bibliothèques partagées, même s'ils apparaissent en premier sur la ligne de commande.