OpenGL GLUT - Undefined reference, jak prawidłowo podlinkować biblioteki

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Pawel1924
Piegowaty Guziec
Piegowaty Guziec
Posty: 4
Rejestracja: 01 lis 2011, 01:27
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86_64

OpenGL GLUT - Undefined reference, jak prawidłowo podlinkować biblioteki

Post autor: Pawel1924 »

Proszę o pomoc w poprawnym skonfigurowaniu opengl aby działał mi ten program:

Kod: Zaznacz cały

#include <cstdlib>
#include <iostream>
#include <GL/glut.h>
#include "pomoc/glpomoc.h"
#include <time.h>
using namespace std;
enum
{
    FULL_WINDOW,
    ASPECT_1_1,
    ORTHO,
    PERSP,
    EXIT
};
int skala = ASPECT_1_1;
int rzut = PERSP;
double fovy = 90;
float alfa1 =0.0f;
float alfa2 =0.0f;
int godzina1, minuta1, sekunda1;
char godzina [80];
char minuta [80];
char sekunda[80];

time_t czas;
struct tm *data;
float _alfa1 =0;
float _alfa2 =0;
float _alfa3 =0;

float anglek , angle0 , angle1 ,angle2,angle3, angle4 = 0.0f;
   
GLPFrame frameCamera;
void TimerFunction (int value)
{
     glutPostRedisplay();
     glutTimerFunc(10,TimerFunction,1);     
}

void Ustawienia()
{
    glClearColor(0.0f,0.0f,0.0f,0.5f);
    glShadeModel(GL_SMOOTH);
    glPolygonMode(GL_FRONT,GL_FILL);
    glPolygonMode(GL_BACK,GL_FILL);
    glpInitFrame(&frameCamera);
    glEnable(GL_DEPTH_TEST);
    glpMoveFrameForward(&frameCamera,-100.0); 
    glpMoveFrameUp(&frameCamera,1.0);
}
void Keyboard (unsigned char key, int x, int y)
{
     switch(key)
     {
                case 'w': alfa1 -=5.0f; break;
                case 's': alfa1 +=5.0f; break;
                case 'a': alfa2 -=5.0f; break;
                case 'd': alfa2 +=5.0f; break;
     
     }
     glutPostRedisplay();
}
void SpecialKey(int key, int x, int y)
{ 
  
  switch(key)
     {
                case GLUT_KEY_LEFT: 
                     glpRotateFrameLocalY(&frameCamera,0.1); break;
                case GLUT_KEY_RIGHT:
                      glpRotateFrameLocalY(&frameCamera,-0.1); break;
                case GLUT_KEY_UP:
                     glpMoveFrameForward(&frameCamera,0.1); break;
                case GLUT_KEY_DOWN: 
                     glpMoveFrameForward(&frameCamera,-0.1); break;
                case GLUT_KEY_PAGE_UP: 
                     glpMoveFrameUp(&frameCamera,0.1); break;
                case GLUT_KEY_PAGE_DOWN: 
                     glpMoveFrameUp(&frameCamera,-0.1); break;
                     
     
     }
     glutPostRedisplay();
     
}

void RysAktorow()
{
    anglek+= 0.01f;
    angle0+= 0.01f;
    angle1+= 0.003f;
    angle2+= 0.007f;
    angle3+= 0.008f;
    angle4+= 0.004f;
    glColor3f(1.0f,1.0f,0.0f);
  
  glRotatef(alfa1,1.0f,0.0f,0.0f);
  glRotatef(alfa2,0.0f,1.0f,0.0f); 
   
   glutWireSphere(10.0,100,40);
   glPushMatrix(); 
    double r=20; //merkury
     for(float i=0; i<2*M_PI; i+=0.01)
     {
                 glBegin(GL_POINTS);
                double x= r*sin(i);
                double y = r*cos(i);
                glColor3f(0.0f, 1.0f, 0.0f);
                glVertex3f(x, y, 0);
                glEnd();
                
     }  
     glPopMatrix();
     
     glPushMatrix();
                    double x0= r*sin(angle0);
                    double z0 = r*cos(angle0);
                    glTranslatef(x0,z0,0);
                    glutWireSphere(2.0,100,40);
     glPopMatrix(); 
     
     glPushMatrix();         
     double r1=30; //wenus
     for(float i=0; i<2*M_PI; i+=0.01)
     {
                 glBegin(GL_POINTS);
                double x= r1*sin(i);
                double y = r1*cos(i);
                glColor3f(1.0f, 1.0f, 0.0f);
                glVertex3f(x, y, 0);
                glEnd();
                
     }  
     glPopMatrix();
     glPushMatrix();
                    double x1= r1*sin(angle1);
                    double z1 = r1*cos(angle1);
                    glTranslatef(x1,z1,0);
                    glutWireSphere(3.0,100,40);
                    
     glPopMatrix(); 
     
     glPushMatrix();
     double r2=40; //ziemia
     for(float i=0; i<2*M_PI; i+=0.01)
     {
                 glBegin(GL_POINTS);
                double x= r2*sin(i);
                double y = r2*cos(i);
                glColor3f(0.0f, 1.0f, 1.0f);
                glVertex3f(x, y, 0);
                glEnd();
                
     }  
      glPopMatrix();
     glPushMatrix();
                    double x2= r2*sin(angle2);
                    double z2 = r2*cos(angle2);
                    glTranslatef(x2,z2,0);
                    glutWireSphere(4.0,100,40);
                    
                    double rk=5; //ksieżyc
                    for(float i=0; i<2*M_PI; i+=0.01)
                    {
                     glBegin(GL_POINTS);
                     double x= rk*sin(i);
                     double y = rk*cos(i);
                     glColor3f(1.0f, 1.0f, 1.0f);
                     glVertex3f(x, 0, y);
                     glEnd();
                     }
                             glPushMatrix();
                                            double xk= rk*sin(anglek);
                                            double zk = rk*cos(anglek);
                                            glTranslatef(xk,0,zk);
                                            glutWireSphere(1.0,100,40);
                             glPopMatrix(); 
     glPopMatrix(); 
     glPushMatrix();
     double r3=50; //mars
     for(float i=0; i<2*M_PI; i+=0.01)
     {
                 glBegin(GL_POINTS);
                double x= r3*sin(i);
                double y = r3*cos(i);
                glColor3f(1.0f, 1.0f, 0.0f);
                glVertex3f(x, y, 0);
                glEnd();
                
     }  
     glPopMatrix();
        glPushMatrix();
                    double x3= r3*sin(angle3);
                    double z3 = r3*cos(angle3);
                    glTranslatef(x3,z3,0);
                    glutWireSphere(3.0,100,40);
                    
     glPopMatrix(); 
     glPushMatrix();
       double r4=65; //jowisz
     for(float i=0; i<2*M_PI; i+=0.01)
     {
                 glBegin(GL_POINTS);
                double x= r4*sin(i);
                double y = r4*cos(i);
                glColor3f(1.0f, 1.0f, 0.75f);
                glVertex3f(x, y, 0);
                glEnd();
                
     }    
      glPopMatrix();
      glPushMatrix();
                    double x4= r4*sin(angle4);
                    double z4 = r4*cos(angle4);
                    glTranslatef(x4,z4,0);
                    glutWireSphere(8.0,100,60);
                    
     glPopMatrix();           
}
void Display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    //glPushMatrix();
    //glTranslatef(0.0f,0.0f,-50.0f);
    glpApplyCameraTransform(&frameCamera);
    
    glPushMatrix();
        RysAktorow();
    glPopMatrix();
    
    //glPopMatrix();
    glFlush();
    glutSwapBuffers();
}

void Reshape (int width, int height)
{
    // obszar renderingu - całe okno
    glViewport (0,0,width,height);

    // wybór macierzy rzutowania
    glMatrixMode (GL_PROJECTION);

    // macierz rzutowania = macierz jednostkowa
    glLoadIdentity ();

    // obliczenie aspektu obrazu z uwzględnieniem
    // przypadku, gdy wysokość obrazu wynosi 0
    GLdouble aspect = 1;
    GLfloat zakres = 200.0f;
    GLfloat blisko = 1.0f;
    GLfloat daleko = 200.0f;
    
    // rzutowanie ortogonalne
    if (rzut==ORTHO)
    {
        // skala 1:1           
        if (skala==ASPECT_1_1)
        {
           if (width < height && width > 0)
              glOrtho (-zakres,zakres,-zakres*height/width,zakres*height/width,-zakres,zakres);
           else
               if (width >= height && height > 0)
                  glOrtho (-zakres*width/height,zakres*width/height,-zakres,zakres,-zakres,zakres);
        }
        else
            glOrtho (-zakres,zakres,-zakres,zakres,-zakres,zakres);
    }

    // rzutowanie perspektywiczne
    if (rzut==PERSP)
    {    
        if (height > 0)
           aspect = width/(GLdouble)height;
        gluPerspective (fovy,aspect,blisko,daleko);
    }
    Display ();

}

void Menu (int value)
{
    switch (value)
    {
        // obszar renderingu - całe okno
        case FULL_WINDOW:
             skala = FULL_WINDOW;
             Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
        break;

        // obszar renderingu - aspekt 1:1
        case ASPECT_1_1:
             skala = ASPECT_1_1;
             Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
        break;

		// rzutowanie ortogonalne	
        case ORTHO:
             rzut=ORTHO;
             Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
        break;
        
        // rzutowanie perspektywiczne
        case PERSP:
             rzut=PERSP;
             Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
        break;

        // wyjście
        case EXIT:
        exit (0);
    }
}


int main(int argc, char *argv[])
{
    glutTimerFunc(10,TimerFunction,1);
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    glutInitWindowSize(800,600);
    glutCreateWindow("Lab 4");
    glutReshapeFunc(Reshape);
    glutDisplayFunc(Display);
    glutKeyboardFunc(Keyboard);
    glutSpecialFunc(SpecialKey);
    Ustawienia();
    
    int MenuSkali = glutCreateMenu(Menu);
        glutAddMenuEntry("Skalowanie pełne", FULL_WINDOW);
        glutAddMenuEntry("Skalowanie 1:1", ASPECT_1_1);
    int MenuRzutowania = glutCreateMenu(Menu);
        glutAddMenuEntry("Rzutowanie prostokatne", ORTHO);
        glutAddMenuEntry("Rzutowanie perspektywiczne", PERSP);
  
    glutCreateMenu(Menu);
    glutAddSubMenu("Skalowanie", MenuSkali);
    glutAddSubMenu("Rzutowanie", MenuRzutowania);
    glutAddMenuEntry("Wyjscie", EXIT);
    glutAttachMenu(GLUT_RIGHT_BUTTON);
    glutMainLoop();
    
    return 0;   
  
}
makefile:

Kod: Zaznacz cały

COMPILER = g++
CCFLAGS = -g -lglut

main.o: main.cpp glframe.o glmatrix.o glloadtga.o glvector.o
	${COMPILER} ${CCFLAGS} main.cpp glframe.o glmatrix.o glloadtga.o glvector.o -o prog

glframe.o: pomoc/glframe.c
	${COMPILER} ${CCFLAGS} pomoc/glframe.c -c main.cpp

glmatrix.o: pomoc/glmatrix.c
	${COMPILER} ${CCFLAGS} pomoc/glmatrix.c -c main.cpp

glloadtga.o: pomoc/glloadtga.c
	${COMPILER} ${CCFLAGS} pomoc/glloadtga.c -c main.cpp

glvector.o: pomoc/glvector.c
	${COMPILER} ${CCFLAGS} pomoc/glvector.c -c main.cpp

clean:
	rm -rf *.o prog 

błędy:

Kod: Zaznacz cały

user@user-Latitude-E6410:~/GL FILES$ make
g++ -g -lglut main.cpp glframe.o glmatrix.o glloadtga.o glvector.o -o prog
/tmp/cc4Wb8X6.o: In function `TimerFunction(int)':
/home/user/GL FILES/main.cpp:36: undefined reference to `glutPostRedisplay'
/home/user/GL FILES/main.cpp:37: undefined reference to `glutTimerFunc'
/tmp/cc4Wb8X6.o: In function `Ustawienia()':
/home/user/GL FILES/main.cpp:42: undefined reference to `glClearColor'
/home/user/GL FILES/main.cpp:43: undefined reference to `glShadeModel'
/home/user/GL FILES/main.cpp:44: undefined reference to `glPolygonMode'
/home/user/GL FILES/main.cpp:45: undefined reference to `glPolygonMode'
/home/user/GL FILES/main.cpp:47: undefined reference to `glEnable'
/tmp/cc4Wb8X6.o: In function `Keyboard(unsigned char, int, int)':
/home/user/GL FILES/main.cpp:61: undefined reference to `glutPostRedisplay'
/tmp/cc4Wb8X6.o: In function `SpecialKey(int, int, int)':
/home/user/GL FILES/main.cpp:83: undefined reference to `glutPostRedisplay'
/tmp/cc4Wb8X6.o: In function `RysAktorow()':
/home/user/GL FILES/main.cpp:95: undefined reference to `glColor3f'
/home/user/GL FILES/main.cpp:97: undefined reference to `glRotatef'
/home/user/GL FILES/main.cpp:98: undefined reference to `glRotatef'
/home/user/GL FILES/main.cpp:100: undefined reference to `glutWireSphere'
/home/user/GL FILES/main.cpp:101: undefined reference to `glPushMatrix'
/home/user/GL FILES/main.cpp:105: undefined reference to `glBegin'
/home/user/GL FILES/main.cpp:108: undefined reference to `glColor3f'
/home/user/GL FILES/main.cpp:109: undefined reference to `glVertex3f'
/home/user/GL FILES/main.cpp:110: undefined reference to `glEnd'
/home/user/GL FILES/main.cpp:113: undefined reference to `glPopMatrix'
/home/user/GL FILES/main.cpp:115: undefined reference to `glPushMatrix'
/home/user/GL FILES/main.cpp:118: undefined reference to `glTranslatef'
/home/user/GL FILES/main.cpp:119: undefined reference to `glutWireSphere'
/home/user/GL FILES/main.cpp:120: undefined reference to `glPopMatrix'
/home/user/GL FILES/main.cpp:122: undefined reference to `glPushMatrix'
/home/user/GL FILES/main.cpp:126: undefined reference to `glBegin'
/home/user/GL FILES/main.cpp:129: undefined reference to `glColor3f'
/home/user/GL FILES/main.cpp:130: undefined reference to `glVertex3f'
/home/user/GL FILES/main.cpp:131: undefined reference to `glEnd'
/home/user/GL FILES/main.cpp:134: undefined reference to `glPopMatrix'
/home/user/GL FILES/main.cpp:135: undefined reference to `glPushMatrix'
/home/user/GL FILES/main.cpp:138: undefined reference to `glTranslatef'
/home/user/GL FILES/main.cpp:139: undefined reference to `glutWireSphere'
/home/user/GL FILES/main.cpp:141: undefined reference to `glPopMatrix'
/home/user/GL FILES/main.cpp:143: undefined reference to `glPushMatrix'
/home/user/GL FILES/main.cpp:147: undefined reference to `glBegin'
/home/user/GL FILES/main.cpp:150: undefined reference to `glColor3f'
/home/user/GL FILES/main.cpp:151: undefined reference to `glVertex3f'
/home/user/GL FILES/main.cpp:152: undefined reference to `glEnd'
/home/user/GL FILES/main.cpp:155: undefined reference to `glPopMatrix'
/home/user/GL FILES/main.cpp:156: undefined reference to `glPushMatrix'
/home/user/GL FILES/main.cpp:159: undefined reference to `glTranslatef'
/home/user/GL FILES/main.cpp:160: undefined reference to `glutWireSphere'
/home/user/GL FILES/main.cpp:165: undefined reference to `glBegin'
/home/user/GL FILES/main.cpp:168: undefined reference to `glColor3f'
/home/user/GL FILES/main.cpp:169: undefined reference to `glVertex3f'
/home/user/GL FILES/main.cpp:170: undefined reference to `glEnd'
/home/user/GL FILES/main.cpp:172: undefined reference to `glPushMatrix'
/home/user/GL FILES/main.cpp:175: undefined reference to `glTranslatef'
/home/user/GL FILES/main.cpp:176: undefined reference to `glutWireSphere'
/home/user/GL FILES/main.cpp:177: undefined reference to `glPopMatrix'
/home/user/GL FILES/main.cpp:178: undefined reference to `glPopMatrix'
/home/user/GL FILES/main.cpp:179: undefined reference to `glPushMatrix'
/home/user/GL FILES/main.cpp:183: undefined reference to `glBegin'
/home/user/GL FILES/main.cpp:186: undefined reference to `glColor3f'
/home/user/GL FILES/main.cpp:187: undefined reference to `glVertex3f'
/home/user/GL FILES/main.cpp:188: undefined reference to `glEnd'
/home/user/GL FILES/main.cpp:191: undefined reference to `glPopMatrix'
/home/user/GL FILES/main.cpp:192: undefined reference to `glPushMatrix'
/home/user/GL FILES/main.cpp:195: undefined reference to `glTranslatef'
/home/user/GL FILES/main.cpp:196: undefined reference to `glutWireSphere'
/home/user/GL FILES/main.cpp:198: undefined reference to `glPopMatrix'
/home/user/GL FILES/main.cpp:199: undefined reference to `glPushMatrix'
/home/user/GL FILES/main.cpp:203: undefined reference to `glBegin'
/home/user/GL FILES/main.cpp:206: undefined reference to `glColor3f'
/home/user/GL FILES/main.cpp:207: undefined reference to `glVertex3f'
/home/user/GL FILES/main.cpp:208: undefined reference to `glEnd'
/home/user/GL FILES/main.cpp:211: undefined reference to `glPopMatrix'
/home/user/GL FILES/main.cpp:212: undefined reference to `glPushMatrix'
/home/user/GL FILES/main.cpp:215: undefined reference to `glTranslatef'
/home/user/GL FILES/main.cpp:216: undefined reference to `glutWireSphere'
/home/user/GL FILES/main.cpp:218: undefined reference to `glPopMatrix'
/tmp/cc4Wb8X6.o: In function `Display()':
/home/user/GL FILES/main.cpp:222: undefined reference to `glClear'
/home/user/GL FILES/main.cpp:223: undefined reference to `glMatrixMode'
/home/user/GL FILES/main.cpp:224: undefined reference to `glLoadIdentity'
/home/user/GL FILES/main.cpp:229: undefined reference to `glPushMatrix'
/home/user/GL FILES/main.cpp:231: undefined reference to `glPopMatrix'
/home/user/GL FILES/main.cpp:234: undefined reference to `glFlush'
/home/user/GL FILES/main.cpp:235: undefined reference to `glutSwapBuffers'
/tmp/cc4Wb8X6.o: In function `Reshape(int, int)':
/home/user/GL FILES/main.cpp:241: undefined reference to `glViewport'
/home/user/GL FILES/main.cpp:244: undefined reference to `glMatrixMode'
/home/user/GL FILES/main.cpp:247: undefined reference to `glLoadIdentity'
/home/user/GL FILES/main.cpp:263: undefined reference to `glOrtho'
/home/user/GL FILES/main.cpp:266: undefined reference to `glOrtho'
/home/user/GL FILES/main.cpp:269: undefined reference to `glOrtho'
/home/user/GL FILES/main.cpp:277: undefined reference to `gluPerspective'
/tmp/cc4Wb8X6.o: In function `Menu(int)':
/home/user/GL FILES/main.cpp:290: undefined reference to `glutGet'
/home/user/GL FILES/main.cpp:290: undefined reference to `glutGet'
/home/user/GL FILES/main.cpp:296: undefined reference to `glutGet'
/home/user/GL FILES/main.cpp:296: undefined reference to `glutGet'
/home/user/GL FILES/main.cpp:302: undefined reference to `glutGet'
/tmp/cc4Wb8X6.o:/home/user/GL FILES/main.cpp:302: more undefined references to `glutGet' follow
/tmp/cc4Wb8X6.o: In function `main':
/home/user/GL FILES/main.cpp:320: undefined reference to `glutTimerFunc'
/home/user/GL FILES/main.cpp:321: undefined reference to `glutInit'
/home/user/GL FILES/main.cpp:322: undefined reference to `glutInitDisplayMode'
/home/user/GL FILES/main.cpp:323: undefined reference to `glutInitWindowSize'
/home/user/GL FILES/main.cpp:324: undefined reference to `glutCreateWindow'
/home/user/GL FILES/main.cpp:325: undefined reference to `glutReshapeFunc'
/home/user/GL FILES/main.cpp:326: undefined reference to `glutDisplayFunc'
/home/user/GL FILES/main.cpp:327: undefined reference to `glutKeyboardFunc'
/home/user/GL FILES/main.cpp:328: undefined reference to `glutSpecialFunc'
/home/user/GL FILES/main.cpp:331: undefined reference to `glutCreateMenu'
/home/user/GL FILES/main.cpp:332: undefined reference to `glutAddMenuEntry'
/home/user/GL FILES/main.cpp:333: undefined reference to `glutAddMenuEntry'
/home/user/GL FILES/main.cpp:334: undefined reference to `glutCreateMenu'
/home/user/GL FILES/main.cpp:335: undefined reference to `glutAddMenuEntry'
/home/user/GL FILES/main.cpp:336: undefined reference to `glutAddMenuEntry'
/home/user/GL FILES/main.cpp:338: undefined reference to `glutCreateMenu'
/home/user/GL FILES/main.cpp:339: undefined reference to `glutAddSubMenu'
/home/user/GL FILES/main.cpp:340: undefined reference to `glutAddSubMenu'
/home/user/GL FILES/main.cpp:341: undefined reference to `glutAddMenuEntry'
/home/user/GL FILES/main.cpp:342: undefined reference to `glutAttachMenu'
/home/user/GL FILES/main.cpp:343: undefined reference to `glutMainLoop'
glframe.o: In function `glpApplyActorTransform(GLPFrame*)':
/home/user/GL FILES/pomoc/glframe.c:45: undefined reference to `glMultMatrixf'
glframe.o: In function `glpApplyCameraTransform(GLPFrame*)':
/home/user/GL FILES/pomoc/glframe.c:81: undefined reference to `glMultMatrixf'
/home/user/GL FILES/pomoc/glframe.c:83: undefined reference to `glTranslatef'
collect2: error: ld returned 1 exit status
make: *** [main.o] Błąd 1
user@user-Latitude-E6410:~/GL FILES$ 

Awatar użytkownika
Kastagir
Sędziwy Jeż
Sędziwy Jeż
Posty: 89
Rejestracja: 09 sty 2006, 16:36
Płeć: Mężczyzna
Wersja Ubuntu: 17.04
Środowisko graficzne: Inne
Architektura: x86_64

Re: OpenGL GLUT - Undefined reference, jak prawidłowo podlinkować biblioteki

Post autor: Kastagir »

Spróbuj dać $CCFLAGS na końcu

Kod: Zaznacz cały

${COMPILER} main.cpp glframe.o glmatrix.o glloadtga.o glvector.o -o prog ${CCFLAGS}
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 48 gości