Archived

This topic is now archived and is closed to further replies.

F*cked up errors compiling a BASIC OGL proggie

This topic is 5144 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

ok, i''ve been getting errors like [Linker error] undefined reference to `GetStockObject@4'' [Linker error] undefined reference to `glClearColor@16'' [Linker error] undefined reference to `glClear@4'' etc. when trying to compile a small program using Dev-C++.. I just modified the auto-generated OpenGL code to make it do something a little different, here''s the code:
  

/**************************
* Includes
*
**************************/

#include <windows.h>
#include <gl/gl.h>
#include <string>

/**************************
* Function Declarations
*
**************************/

LRESULT CALLBACK WndProc (HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam);
void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC);
void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC);


/**************************
* WinMain
*
**************************/

int WINAPI WinMain (HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int iCmdShow)
{
   WNDCLASS wc;
   HWND hWnd;
   HDC hDC;
   HGLRC hRC;        
   MSG msg;
   BOOL bQuit = FALSE;
   float theta = 0.0f;
   std::string szWinName;
   szWinName = "OpenGL Crap";

   /* register window class */
   wc.style = CS_OWNDC;
   wc.lpfnWndProc = WndProc;
   wc.cbClsExtra = 0;
   wc.cbWndExtra = 0;
   wc.hInstance = hInstance;
   wc.hIcon = LoadIcon (NULL, IDI_APPLICATION);
   wc.hCursor = LoadCursor (NULL, IDC_ARROW);
   wc.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH);
   wc.lpszMenuName = NULL;
   wc.lpszClassName = "GLSample";
   RegisterClass (&wc);

   /* create main window */
   hWnd = CreateWindow (
     "GLSample", szWinName.c_str(), 
     WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE,
     0, 0, 256, 256,
     NULL, NULL, hInstance, NULL);

   /* enable OpenGL for the window */
   EnableOpenGL (hWnd, &hDC, &hRC);

   /* program main loop */
   while (!bQuit)
   {
       /* check for messages */
       if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
       {
           /* handle or dispatch messages */
           if (msg.message == WM_QUIT)
           {
               bQuit = TRUE;
           }
           else
           {
               TranslateMessage (&msg);
               DispatchMessage (&msg);
           }
       }
       else
       {
           /* OpenGL animation code goes here */

           glClearColor (0.0f, 0.0f, 0.0f, 1.0f);
           glClear (GL_COLOR_BUFFER_BIT);
           glLoadIdentity ();
           glTranslatef(0.0f,0.0f, 0.0f);
           
           glPushMatrix ();
           
           glRotatef (theta, 0.0f, 0.0f, 1.0f);
           
           glBegin (GL_QUADS);
                       glColor3f (1.0f, 0.0f, 0.0f);   glVertex2f (0.50f, 0.75f);
                       glColor3f (0.0f, 1.0f, 0.0f);   glVertex2f (0.50f, -0.75f);
                       glColor3f (0.0f, 0.0f, 1.0f);   glVertex2f (-0.50f, -0.75f);
                       glColor3f (1.0f, 1.0f, 0.0f);   glVertex2f (-0.50f, 0.75f);
           glEnd ();
           
           glPopMatrix ();

           SwapBuffers (hDC);
           
           theta += 1.0f;
           Sleep (1);
       }
   }

   /* shutdown OpenGL */
   DisableOpenGL (hWnd, hDC, hRC);

   /* destroy the window explicitly */
   DestroyWindow (hWnd);

   return msg.wParam;
}


/********************
* Window Procedure
*
********************/

LRESULT CALLBACK WndProc (HWND hWnd, UINT message,
                         WPARAM wParam, LPARAM lParam)
{

   switch (message)
   {
   case WM_CREATE:
       return 0;
   case WM_CLOSE:
       PostQuitMessage (0);
       return 0;

   case WM_DESTROY:
       return 0;

   case WM_KEYDOWN:
       switch (wParam)
       {
       case VK_ESCAPE:
           PostQuitMessage(0);
           return 0;
       }
       return 0;

   default:
       return DefWindowProc (hWnd, message, wParam, lParam);
   }
}


/*******************
* Enable OpenGL
*
*******************/

void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC)
{
   PIXELFORMATDESCRIPTOR pfd;
   int iFormat;

   /* get the device context (DC) */
   *hDC = GetDC (hWnd);

   /* set the pixel format for the DC */
   ZeroMemory (&pfd, sizeof (pfd));
   pfd.nSize = sizeof (pfd);
   pfd.nVersion = 1;
   pfd.dwFlags = PFD_DRAW_TO_WINDOW | 
     PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
   pfd.iPixelType = PFD_TYPE_RGBA;
   pfd.cColorBits = 24;
   pfd.cDepthBits = 16;
   pfd.iLayerType = PFD_MAIN_PLANE;
   iFormat = ChoosePixelFormat (*hDC, &pfd);
   SetPixelFormat (*hDC, iFormat, &pfd);

   /* create and enable the render context (RC) */
   *hRC = wglCreateContext( *hDC );
   wglMakeCurrent( *hDC, *hRC );

}


/******************
* Disable OpenGL
*
******************/

void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC)
{
   wglMakeCurrent (NULL, NULL);
   wglDeleteContext (hRC);
   ReleaseDC (hWnd, hDC);
} 
 

Share this post


Link to post
Share on other sites
Guest Anonymous Poster
It looks like libraries aren''t linked. Hit ALT-P to open project options. Then goto the parameters tab and type this in the linker box.

-lopengl32 -lglu32 or -lglu32 -lopengl32 (can''t remember the order)

Share this post


Link to post
Share on other sites
add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq

*gasp for breath*

add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq add to faq

Share this post


Link to post
Share on other sites
Raloth: If you'd actually read the FAQ, you'd know you can email me with submissions. Assuming you can master basic spelling and grammar, I might even accept it. I don't get paid to moderate this forum, and I have better things to do than add entries to the FAQ every time a newbie doesn't bother to read a tutorial properly before pressing ctrl-v.

[edited by - benjamin bunny on November 11, 2003 8:49:34 PM]

Share this post


Link to post
Share on other sites
hush now Tron3K, you should know that errors are all the compilers fault and nuffin todo with the programmer not understanding the enviroment they are using or bothering to read simple docs!
shame on you! shame for thinking a programmer could be mistaken when its got to be the machines fault!
I dunno... what are we coming to..

Share this post


Link to post
Share on other sites