Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Błędy przy próbie kompilacji

Ostatnio zmodyfikowano 2016-01-02 12:43
Autor Wiadomość
Heramis
Temat założony przez niniejszego użytkownika
Błędy przy próbie kompilacji
» 2015-12-31 12:32:58
Witam
Od kilku dni uczę się pisać programy w języku C++ w programie code::blocks. Teraz chcę zająć się renderingiem 3d według kursu z tej strony. Pobrałem biblioteki do opengl dodałem je do folderu include do programu wkleiłem kod programu z lekcji http://cpp0x.pl/kursy/Kurs-OpenGL-C++/Pierwszy-program/103
I nacisnąłem F9 aby przetestować czy wszystko dobrze działa. Niestety wywaliło błędy:

Compiling: F:\Napisanemojegry\test.cpp
Linking console executable: F:\Napisanemojegry\test.exe
F:\Napisanemojegry\test.o:test.cpp:(.text+0x1c): undefined reference to `_imp____glutInitWithExit@12'
F:\Napisanemojegry\test.o:test.cpp:(.text+0x3e): undefined reference to `_imp____glutCreateWindowWithExit@8'
F:\Napisanemojegry\test.o:test.cpp:(.text+0x60): undefined reference to `_imp____glutCreateMenuWithExit@8'
F:\Napisanemojegry\test.o:test.cpp:(.text+0x97): undefined reference to `glClearColor@16'
F:\Napisanemojegry\test.o:test.cpp:(.text+0xa6): undefined reference to `glClear@4'
F:\Napisanemojegry\test.o:test.cpp:(.text+0xc8): undefined reference to `glColor3f@12'
F:\Napisanemojegry\test.o:test.cpp:(.text+0xd7): undefined reference to `glBegin@4'
F:\Napisanemojegry\test.o:test.cpp:(.text+0xf9): undefined reference to `glVertex3f@12'
F:\Napisanemojegry\test.o:test.cpp:(.text+0x11b): undefined reference to `glVertex3f@12'
F:\Napisanemojegry\test.o:test.cpp:(.text+0x13d): undefined reference to `glVertex3f@12'
F:\Napisanemojegry\test.o:test.cpp:(.text+0x15f): undefined reference to `glVertex3f@12'
F:\Napisanemojegry\test.o:test.cpp:(.text+0x167): undefined reference to `glEnd@0'
F:\Napisanemojegry\test.o:test.cpp:(.text+0x16c): undefined reference to `glFlush@0'
F:\Napisanemojegry\test.o:test.cpp:(.text+0x171): undefined reference to `_imp__glutSwapBuffers@0'
F:\Napisanemojegry\test.o:test.cpp:(.text+0x1d4): undefined reference to `_imp__glutInitDisplayMode@4'
F:\Napisanemojegry\test.o:test.cpp:(.text+0x1ed): undefined reference to `_imp__glutInitWindowSize@8'
F:\Napisanemojegry\test.o:test.cpp:(.text+0x20d): undefined reference to `_imp__glutDisplayFunc@4'
F:\Napisanemojegry\test.o:test.cpp:(.text+0x21e): undefined reference to `_imp__glutReshapeFunc@4'
F:\Napisanemojegry\test.o:test.cpp:(.text+0x246): undefined reference to `_imp__glutAddMenuEntry@8'
F:\Napisanemojegry\test.o:test.cpp:(.text+0x257): undefined reference to `_imp__glutAttachMenu@4'
F:\Napisanemojegry\test.o:test.cpp:(.text+0x261): undefined reference to `_imp__glutMainLoop@0'
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 0 seconds)
21 errors, 0 warnings

Skopiowane prosto z zakładki Build Log
W kodzie nie pokazuje żadnych błędów tzw. tych kwadratów czerwonych

Jestem dopiero początkującym dlatego proszę o pomoc co mam dalej zrobić.
Pozdrawiam
P-142628
DejaVu
» 2015-12-31 13:16:04
To są błędy linkera - musisz dolinkować odpowiednie biblioteki - zapewne nie doczytałeś dokładnie którejś lekcji z kursu.
P-142631
Heramis
Temat założony przez niniejszego użytkownika
» 2015-12-31 14:37:53
No właśnie w kursie nie widziałem aby było napisane jak dodać biblioteki opengl do programu.

Edit:
Udało mi się dodać linkery. Po kolei wklejałem kody z lekcji i testowałem, ale po wgraniu kodu:
/*
(c) Janusz Ganczarski
http://www.januszg.hg.pl
JanuszG(małpeczka)enter.net.pl
*/

#include <GL/glut.h>
#include <stdlib.h>

// stałe do obsługi menu podręcznego

enum
{
    FULL_WINDOW, // aspekt obrazu - całe okno
    ASPECT_1_1, // aspekt obrazu 1:1
    EXIT // wyjście
};

// aspekt obrazu

int aspect = FULL_WINDOW;

// rozmiary bryły obcinania

const GLdouble left = - 10.0;
const GLdouble right = 10.0;
const GLdouble bottom = - 10.0;
const GLdouble top = 10.0;
const GLdouble near = 50.0;
const GLdouble far = 70.0;

// współczynnik skalowania

GLfloat scale = 1.0;

// kąty obrotu

GLfloat rotatex = 0.0;
GLfloat rotatey = 0.0;

// przesunięcie

GLfloat translatex = 0.0;
GLfloat translatey = 0.0;

// wskaźnik naciśnięcia lewego przycisku myszki

int button_state = GLUT_UP;

// położenie kursora myszki

int button_x, button_y;

// funkcja rysująca blok 3x3

void Cube3x3()
{
    glutWireCube( 1.0 );
    glTranslatef( 1.0, 0.0, 0.0 );
    glutWireCube( 1.0 );
    glTranslatef( 0.0, - 1.0, 0.0 );
    glutWireCube( 1.0 );
    glTranslatef( - 1.0, 0.0, 0.0 );
    glutWireCube( 1.0 );
    glTranslatef( - 1.0, 0.0, 0.0 );
    glutWireCube( 1.0 );
    glTranslatef( 0.0, 1.0, 0.0 );
    glutWireCube( 1.0 );
    glTranslatef( 0.0, 1.0, 0.0 );
    glutWireCube( 1.0 );
    glTranslatef( 1.0, 0.0, 0.0 );
    glutWireCube( 1.0 );
    glTranslatef( 1.0, 0.0, 0.0 );
    glutWireCube( 1.0 );
}

// funkcja rysująca blok 2x2

void Cube2x2()
{
    glutWireCube( 1.0 );
    glTranslatef( 1.0, 0.0, 0.0 );
    glutWireCube( 1.0 );
    glTranslatef( 0.0, - 1.0, 0.0 );
    glutWireCube( 1.0 );
    glTranslatef( - 1.0, 0.0, 0.0 );
    glutWireCube( 1.0 );
}

// funkcja rysująca piramidę z sześcianów

void Pyramid()
{
    // podstawa 6x6
    glPushMatrix();
    glTranslatef( 1.5, 1.5, 0.0 );
    Cube3x3();
    glPopMatrix();
    glPushMatrix();
    glTranslatef( 1.5, - 1.5, 0.0 );
    Cube3x3();
    glPopMatrix();
    glPushMatrix();
    glTranslatef( - 1.5, - 1.5, 0.0 );
    Cube3x3();
    glPopMatrix();
    glPushMatrix();
    glTranslatef( - 1.5, 1.5, 0.0 );
    Cube3x3();
    glPopMatrix();
   
    // drugi poziom 5x5
    glPushMatrix();
    glTranslatef( 0.0, 0.0, 1.0 );
    glPushMatrix();
    glTranslatef( 1.0, 1.0, 0.0 );
    Cube3x3();
    glPopMatrix();
    glPushMatrix();
    glTranslatef( 1.0, - 1.0, 0.0 );
    Cube2x2();
    glPopMatrix();
    glPushMatrix();
    glTranslatef( - 2.0, 2.0, 0.0 );
    Cube2x2();
    glPopMatrix();
    glPushMatrix();
    glTranslatef( - 1.0, - 1.0, 0.0 );
    Cube3x3();
    glPopMatrix();
    glPopMatrix();
   
    // trzeci poziom 4x4
    glPushMatrix();
    glTranslatef( 0.0, 0.0, 2.0 );
    glPushMatrix();
    glTranslatef( 0.5, - 0.5, 0.0 );
    Cube2x2();
    glPopMatrix();
    glPushMatrix();
    glTranslatef( 0.5, 1.5, 0.0 );
    Cube2x2();
    glPopMatrix();
    glPushMatrix();
    glTranslatef( - 1.5, 1.5, 0.0 );
    Cube2x2();
    glPopMatrix();
    glPushMatrix();
    glTranslatef( - 1.5, - 0.5, 0.0 );
    Cube2x2();
    glPopMatrix();
    glPopMatrix();
   
    // czwarty poziom 3x3
    glPushMatrix();
    glTranslatef( 0.0, 0.0, 3.0 );
    Cube3x3();
    glPopMatrix();
   
    // piąty poziom 2x2
    glPushMatrix();
    glTranslatef( 0.0, 0.0, 4.0 );
    glTranslatef( - 0.5, 0.5, 0.0 );
    Cube2x2();
    glPopMatrix();
   
    // szósty poziom 1x1
    glPushMatrix();
    glTranslatef( 0.0, 0.0, 5.0 );
    glutWireCube( 1.0 );
    glPopMatrix();
}

// funkcja generująca scenę 3D

void Display()
{
    // kolor tła - zawartość bufora koloru
    glClearColor( 1.0, 1.0, 1.0, 1.0 );
   
    // czyszczenie bufora koloru
    glClear( GL_COLOR_BUFFER_BIT );
   
    // wybór macierzy modelowania
    glMatrixMode( GL_MODELVIEW );
   
    // macierz modelowania = macierz jednostkowa
    glLoadIdentity();
   
    // przesunięcie układu współrzędnych obiektu do środka bryły odcinania
    glTranslatef( 0, 0, -( near + far ) / 2 );
   
    // przesunięcie obiektu - ruch myszką
    glTranslatef( translatex, translatey, 0.0 );
   
    // skalowanie obiektu - klawisze "+" i "-"
    glScalef( scale, scale, scale );
   
    // obroty obiektu - klawisze kursora
    glRotatef( rotatex, 1.0, 0, 0 );
    glRotatef( rotatey, 0, 1.0, 0 );
   
    // kolor krawędzi obiektu
    glColor3f( 0.0, 0.0, 0.0 );
   
    // rysowanie piramidy
    Pyramid();
   
    // skierowanie poleceń do wykonania
    glFlush();
   
    // zamiana buforów koloru
    glutSwapBuffers();
}

// zmiana wielkości okna

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();
   
    // parametry bryły obcinania
    if( aspect == ASPECT_1_1 )
    {
        // wysokość okna większa od wysokości okna
        if( width < height && width > 0 )
             glFrustum( left, right, bottom * height / width, top * height / width, near, far );
        else
       
        // szerokość okna większa lub równa wysokości okna
        if( width >= height && height > 0 )
             glFrustum( left * width / height, right * width / height, bottom, top, near, far );
       
    }
    else
         glFrustum( left, right, bottom, top, near, far );
   
    // generowanie sceny 3D
    Display();
}

// obsługa klawiatury

void Keyboard( unsigned char key, int x, int y )
{
    // klawisz +
    if( key == '+' )
         scale += 0.1;
    else
   
    // klawisz -
    if( key == '-' && scale > 0.1 )
         scale -= 0.1;
   
    // odrysowanie okna
    Reshape( glutGet( GLUT_WINDOW_WIDTH ), glutGet( GLUT_WINDOW_HEIGHT ) );
}

// obsługa klawiszy funkcyjnych i klawiszy kursora

void SpecialKeys( int key, int x, int y )
{
    switch( key )
    {
        // kursor w lewo
    case GLUT_KEY_LEFT:
        rotatey -= 1;
        break;
       
        // kursor w górę
    case GLUT_KEY_UP:
        rotatex -= 1;
        break;
       
        // kursor w prawo
    case GLUT_KEY_RIGHT:
        rotatey += 1;
        break;
       
        // kursor w dół
    case GLUT_KEY_DOWN:
        rotatex += 1;
        break;
    }
   
    // odrysowanie okna
    Reshape( glutGet( GLUT_WINDOW_WIDTH ), glutGet( GLUT_WINDOW_HEIGHT ) );
}

// obsługa przycisków myszki

void MouseButton( int button, int state, int x, int y )
{
    if( button == GLUT_LEFT_BUTTON )
    {
        // zapamiętanie stanu lewego przycisku myszki
        button_state = state;
       
        // zapamiętanie położenia kursora myszki
        if( state == GLUT_DOWN )
        {
            button_x = x;
            button_y = y;
        }
    }
}

// obsługa ruchu kursora myszki

void MouseMotion( int x, int y )
{
    if( button_state == GLUT_DOWN )
    {
        // pobranie macierz modelowania
        GLdouble model[ 16 ];
        glGetDoublev( GL_MODELVIEW_MATRIX, model );
       
        // pobranie macierzy rzutowania
        GLdouble proj[ 16 ];
        glGetDoublev( GL_PROJECTION_MATRIX, proj );
       
        // pobranie obszaru renderingu
        GLint view[ 4 ];
        glGetIntegerv( GL_VIEWPORT, view );
       
        // tablice ze odczytanymi współrzędnymi w przestrzeni widoku
        GLdouble prev[ 3 ], curr[ 3 ];
       
        // pobranie współrzędnych w przestrzeni widoku
        // dla poprzedniego położenia kursora myszki
        gluUnProject( button_x, button_y, 0.0, model, proj, view, prev + 0, prev + 1, prev + 2 );
       
        // pobranie współrzędnych w przestrzeni widoku
        // dla bieżącego położenia kursora myszki
        gluUnProject( x, y, 0.0, model, proj, view, curr + 0, curr + 1, curr + 2 );
       
        // obliczenie współrzędnych wektora przesunięcia obiektu
        translatex += curr[ 0 ] - prev[ 0 ];
        translatey += prev[ 1 ] - curr[ 1 ];
       
        // zapamiętanie położenia kursora myszki
        button_x = x;
        button_y = y;
       
        // odrysowanie okna
        glutPostRedisplay();
    }
}

// obsługa menu podręcznego

void Menu( int value )
{
    switch( value )
    {
        // obszar renderingu - całe okno
    case FULL_WINDOW:
        aspect = FULL_WINDOW;
        Reshape( glutGet( GLUT_WINDOW_WIDTH ), glutGet( GLUT_WINDOW_HEIGHT ) );
        break;
       
        // obszar renderingu - aspekt 1:1
    case ASPECT_1_1:
        aspect = ASPECT_1_1;
        Reshape( glutGet( GLUT_WINDOW_WIDTH ), glutGet( GLUT_WINDOW_HEIGHT ) );
        break;
       
        // wyjście
    case EXIT:
        exit( 0 );
    }
}

int main( int argc, char * argv[] )
{
    // inicjalizacja biblioteki GLUT
    glutInit( & argc, argv );
   
    // inicjalizacja bufora ramki
    glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB );
   
    // rozmiary głównego okna programu
    glutInitWindowSize( 400, 400 );
   
    // utworzenie głównego okna programu
    glutCreateWindow( "Stos modelowania" );
   
    // dołączenie funkcji generującej scenę 3D
    glutDisplayFunc( Display );
   
    // dołączenie funkcji wywoływanej przy zmianie rozmiaru okna
    glutReshapeFunc( Reshape );
   
    // dołączenie funkcji obsługi klawiatury
    glutKeyboardFunc( Keyboard );
   
    // dołączenie funkcji obsługi klawiszy funkcyjnych i klawiszy kursora
    glutSpecialFunc( SpecialKeys );
   
    // obsługa przycisków myszki
    glutMouseFunc( MouseButton );
   
    // obsługa ruchu kursora myszki
    glutMotionFunc( MouseMotion );
   
    // utworzenie podmenu - aspekt obrazu
    int MenuAspect = glutCreateMenu( Menu );
    #ifdef WIN32
   
    glutAddMenuEntry( "Aspekt obrazu - całe okno", FULL_WINDOW );
    #else
   
    glutAddMenuEntry( "Aspekt obrazu - cale okno", FULL_WINDOW );
    #endif
   
    glutAddMenuEntry( "Aspekt obrazu 1:1", ASPECT_1_1 );
   
    // menu główne
    glutCreateMenu( Menu );
    glutAddSubMenu( "Aspekt obrazu", MenuAspect );
    #ifdef WIN32
   
    glutAddMenuEntry( "Wyjście", EXIT );
    #else
   
    glutAddMenuEntry( "Wyjscie", EXIT );
    #endif
   
    // określenie przycisku myszki obsługującego menu podręczne
    glutAttachMenu( GLUT_RIGHT_BUTTON );
   
    // wprowadzenie programu do obsługi pętli komunikatów
    glutMainLoop();
    return 0;
}

Z lekcji: http://cpp0x.pl/kursy/Kurs-OpenGL-C++/Przeksztalcenia-geometryczne/105

Wyskoczyły błędy związane z linijką:

const GLdouble near = 50.0;

A treść błędów to:
-------------- Build: Debug in Gra_v1 ---------------

Compiling: Main.cpp
F:\Napisanemojegry\Gra_v1\Main.cpp:29: error: expected unqualified-id before '=' token
F:\Napisanemojegry\Gra_v1\Main.cpp:30: error: expected unqualified-id before '=' token
F:\Napisanemojegry\Gra_v1\Main.cpp: In function 'void Display()':
F:\Napisanemojegry\Gra_v1\Main.cpp:191: error: expected primary-expression before ')' token
F:\Napisanemojegry\Gra_v1\Main.cpp: In function 'void Reshape(int, int)':
F:\Napisanemojegry\Gra_v1\Main.cpp:234: error: expected primary-expression before ',' token
F:\Napisanemojegry\Gra_v1\Main.cpp:234: error: expected primary-expression before ')' token
F:\Napisanemojegry\Gra_v1\Main.cpp:239: error: expected primary-expression before ',' token
F:\Napisanemojegry\Gra_v1\Main.cpp:239: error: expected primary-expression before ')' token
F:\Napisanemojegry\Gra_v1\Main.cpp:243: error: expected primary-expression before ',' token
F:\Napisanemojegry\Gra_v1\Main.cpp:243: error: expected primary-expression before ')' token
Process terminated with status 1 (0 minutes, 0 seconds)
9 errors, 0 warnings

Co tym razem jest nie tak?
Pozdrawiam
P-142635
Gabes
» 2016-01-01 11:12:01
Zmień nazwy w
const GLdouble near = 50.0;
const GLdouble far = 70.0;

np.near1,far1.
Najszybciej za pomocą Replace(lupa z czerwoną literką R)
P-142653
Heramis
Temat założony przez niniejszego użytkownika
» 2016-01-02 12:43:12
Działa :D
Spróbuje resztę przykładów uruchomić. Mam nadzieje że nie będzie z tym kłopotu.
Dziękuje za pomoc
P-142690
« 1 »
  Strona 1 z 1