2012-09-01 82 views
0

這裏編譯錯誤是,我試圖運行用OpenGL

////////////////////////////////////////////////////   
// square.cpp 
// 
// Stripped down OpenGL program that draws a square. 
// 
// Sumanta Guha. 
//////////////////////////////////////////////////// 

#include <iostream> 

#ifdef __APPLE__ 
# include <GLUT/glut.h> 
#else 
# include <GL/glut.h> 
#endif 

using namespace std; 

// Drawing (display) routine. 
void drawScene(void) 
{ 
    // Clear screen to background color. 
    glClear(GL_COLOR_BUFFER_BIT); 

    // Set foreground (or drawing) color. 
    glColor3f(0.0, 0.0, 0.0); 

    // Draw a polygon with specified vertices. 
    glBegin(GL_POLYGON); 
     glVertex3f(20.0, 20.0, 0.0); 
     glVertex3f(80.0, 20.0, 0.0); 
     glVertex3f(80.0, 80.0, 0.0); 
     glVertex3f(20.0, 80.0, 0.0); 
    glEnd(); 

    // Flush created objects to the screen, i.e., force rendering. 
    glFlush(); 
} 

// Initialization routine. 
void setup(void) 
{ 
    // Set background (or clearing) color. 
    glClearColor(1.0, 1.0, 1.0, 0.0); 
} 

// OpenGL window reshape routine. 
void resize(int w, int h) 
{ 
    // Set viewport size to be entire OpenGL window. 
    glViewport(0, 0, (GLsizei)w, (GLsizei)h); 

    // Set matrix mode to projection. 
    glMatrixMode(GL_PROJECTION); 

    // Clear current projection matrix to identity. 
    glLoadIdentity(); 

    // Specify the orthographic (or perpendicular) projection, 
    // i.e., define the viewing box. 
    glOrtho(0.0, 100.0, 0.0, 100.0, -1.0, 1.0); 

    // Set matrix mode to modelview. 
    glMatrixMode(GL_MODELVIEW); 

    // Clear current modelview matrix to identity. 
    glLoadIdentity(); 
} 

// Keyboard input processing routine. 
void keyInput(unsigned char key, int x, int y) 
{ 
    switch(key) 
    { 
     // Press escape to exit. 
     case 27: 
     exit(0); 
     break; 
     default: 
     break; 
    } 
} 

// Main routine: defines window properties, creates window, 
// registers callback routines and begins processing. 
int main(int argc, char **argv) 
{ 
    // Initialize GLUT. 
    glutInit(&argc, argv); 

    // Set display mode as single-buffered and RGB color. 
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); 

    // Set OpenGL window size. 
    glutInitWindowSize(500, 500); 

    // Set position of OpenGL window upper-left corner. 
    glutInitWindowPosition(100, 100); 

    // Create OpenGL window with title. 
    glutCreateWindow("square.cpp"); 

    // Initialize. 
    setup(); 

    // Register display routine. 
    glutDisplayFunc(drawScene); 

    // Register reshape routine. 
    glutReshapeFunc(resize); 

    // Register keyboard routine. 
    glutKeyboardFunc(keyInput); 

    // Begin processing. 
    glutMainLoop(); 

    return 0; 
} 

我確信我已經過剩和OpenGL安裝和最新的節目,這是我得到的錯誤(我編譯代碼,它在這本書是從2011年的佈局方式):

ubuntu:~/Downloads/Code$ gcc square.cpp -o square -I /usr/include/ -L /usr/lib -lglut -lGL -lGLU -lX11 /tmp/ccAq6h4h.o:square.cpp:function __static_initialization_and_destruction_0(int, int): error: undefined reference to 'std::ios_base::Init::Init()' /tmp/ccAq6h4h.o:square.cpp:function __static_initialization_and_destruction_0(int, int): error: undefined reference to 'std::ios_base::Init::~Init()' collect2: ld returned 1 exit status

我寫我自己的代碼,並留下它作爲交流文件,並將其編譯

+0

好的代碼工作時,我用g ++而不是gcc編譯,是否有作者會說使用gcc而不是g ++編譯的原因?我對此很新,我知道gcc編譯爲c程序,但使用g ++編譯和鏈接正確? –

+1

如果作者告訴你使用gcc,他們就是白癡。 C++ **不是** C,它甚至不是它的超集。如果你的代碼是C++,你需要一個C++編譯器。這是g ++。 – datenwolf

+1

您知道您使用的是舊版OpenGL,是嗎?你可能找到了一個過時的教程。有關更多信息,請參閱http://www.opengl.org/wiki/Legacy_OpenGL。 –

回答

0

當時的錯誤文件的簡單錯誤正在編譯。